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