1. Обзор
В этом кратком руководстве мы рассмотрим, как получить все данные из таблицы с помощью Hibernate, используя JPQL или Criteria API.
JPQL обеспечивает более быструю и простую реализацию, в то время как использование Criteria API является более динамичным и надежным.
2. JPQL
JPQL предоставляет простой и понятный способ получить все сущности из таблицы.
Давайте посмотрим, как может выглядеть получение всех студентов из таблицы с помощью JPQL:
public List<Student> findAllStudentsWithJpql() {
return session.createQuery("SELECT a FROM Student a", Student.class).getResultList();
}
Метод createQuery()
нашего сеанса Hibernate получает типизированную строку запроса в качестве первого аргумента и тип объекта в качестве второго. Мы выполняем запрос с вызовом метода getResultList()
, который возвращает результаты в виде типизированного списка
.
Простота является преимуществом этого подхода. JPQL очень близок к SQL, поэтому его легче писать и понимать.
3. API критериев
Criteria API обеспечивает динамический подход к построению запросов JPA.
Это позволяет нам создавать запросы, создавая экземпляры объектов Java, которые представляют элементы запроса. И это более чистое решение, если запросы создаются из множества необязательных полей, потому что это устраняет множество конкатенаций строк.
Мы только что видели запрос «выбрать все» с использованием JPQL. Давайте посмотрим на его эквивалент с помощью Criteria API:
public List<Student> findAllStudentsWithCriteriaQuery() {
CriteriaBuilder cb = session.getCriteriaBuilder();
CriteriaQuery<Student> cq = cb.createQuery(Student.class);
Root<Student> rootEntry = cq.from(Student.class);
CriteriaQuery<Student> all = cq.select(rootEntry);
TypedQuery<Student> allQuery = session.createQuery(all);
return allQuery.getResultList();
}
Во-первых, мы получаем CriteriaBuilder
, который используем для создания типизированного запроса Criteria
Query
. Позже мы устанавливаем корневую запись для запроса. И, наконец, мы выполняем его с помощью метода getResultList()
.
Теперь этот подход аналогичен тому, что мы делали ранее. Но это дает нам полный доступ к языку Java, чтобы сформулировать больше нюансов при формулировании запроса.
Запросы JPQL и запросы на основе критериев JPA не только похожи, но и имеют одинаковую производительность.
4. Вывод
В этой статье мы продемонстрировали, как получить все сущности из таблицы с помощью JPQL или Criteria API.
Полный исходный код примера доступен на GitHub .