Мы приведем несколько примеров запросов выборки значений SELECT. Все эти примеры взяты из примера Corporate Education.
Демо-модель: Corporate EducationПусть нам нужно считать длительность определенного курса обучения из следующей таблицы:
И использовать эту длительность в качестве таймаута перехода диаграммы состояний. Код будет таким:
(double)selectFrom( courses ).
where( courses.course.eq( courseName ) ).
uniqueResult( courses.duration_days )
Обратите внимание на использование функции uniqueResult() и явное приведение к типу (double): оно необходимо, поскольку функция возвращает значение типа Integer, и пользователю необходимо самостоятельно привести его к типу вещественного числа double.
Предположим, нам нужно считать несколько записей из БД, отсортированных по записям в определенном столбце, и проанализировать их. Пусть мы работаем со следующей таблицей:
И нам нужно считать все курсы для определенного типа служащего и отсортировать их по столбцу not_earlier_than_w_day. В этом случае код будет выглядеть так:
List<Tuple> plan =
selectFrom( education_plans ).
where( education_plans.employee_type.eq( type ) ).
orderBy( education_plans.not_earlier_than_w_day.asc() ).
list();
Обратите внимание, что вызов функции orderBy() предшествует финальному вызову функции list(). Работа с результатами ведется достаточно простым образом, просто итерируйтесь в цикле, и осуществляйте доступ к определенному столбцу с помощью функции get():
for( Tuple tup : plan ) {
…
tup.get( education_plans.course );
tup.get( education_plans.not_earlier_than_w_day );
tup.get( education_plans.not_later_than_w_day );
…
}
Это очень легко: просто укажите имя столбца в вызове функции list():
List<String> courseslist = selectFrom( courses ).list( courses.course );
Таблица в данном случае следующая:
И конечно вы можете задать условие, добавив в середину функцию where(), как в следующем примере, где нам нужно получить все курсы обучения, которые могут быть проведены тренером данного типа:
List<String> complist = selectFrom( trainer_competences ).
where( trainer_competences.trainer_type.eq( type ) ).
list( trainer_competences.course );
Приведенный выше код работает со следующей таблицей:
Предположим, у вас есть коллекция employeeTypes, и вы хотите добавить в нее все значения из столбца type таблицы БД employee_types. Это выполнит следующий код:
employeeTypes.addAll(
selectFrom( employee_types ).
list( employee_types.type )
);
И опять же, вы можете добавить любые дополнительные условия с помощью функции where().
Пусть вам нужно проверить, может ли тренер определенного типа провести данный курс обучения. Компетенции тренеров заданы в следующей таблице:
Запрос будет выглядеть так:
selectFrom( trainer_competences ).
where( trainer_competences.trainer_type.eq( type ),
trainer_competences.course.eq( course ) ).
exists();
Обратите внимание на два условия, заданных в функции where() как два параметра, перечисленные через запятую – они интерпретируются как два условия, объединенные оператором AND (И), и завершающий вызов функции exists() возвращает булевский результат.
-
Как мы можем улучшить эту статью?
-