Язык запросов Hibernate (HQL)
HQL (Hibernate Query Language) – это объектно-ориентированный (далее – ОО) язык запросов, который крайне похож на SQL.
Отличие между HQL и SQL состоит в том, что SQL работает таблицами в базе данных (далее – БД) и их столбцами, а HQL – с сохраняемыми объектами (Persistent Objects) и их полями (атрибутами класса).
Hibernate транслирует HQL- запросы в понятные для БД SQL - запросы, которые и выполняют необходимые нам действия в БД.
Мы также имеем возможность использовать обычные SQL -запросы в Hibernate, используя Native SQL, но использование HQL является более предпочтительным.
Давайте рассмотрим основные ключевые слова языка HQL:
FROM
Если мы хотим загрузить в память наши сохраняемые объекты, то будем использовать ключевое слово FROM. Вот пример его использования:
Query query = session.createQuery("FROM Developer");
List developers = query.list();
Developer – это POJO-класс Developer.java, который ассоциирован с таблицей в шаге БД.
INSERT
Мы используем ключевое слово INSERT в том случае, если хотим добавить запись в таблицу нашей БД.
Вот пример использования этого ключевого слова:
Query query =
session.createQuery("INSERT INTO Developer (firstName, lastName, specialty, experience)");
UPDATE
Ключевое слово UPDATE используется для обновления одного или нескольких полей объекта. Вот так это выглядит на практике:
Query query =
session.createQuery(UPDATE Developer SET experience =: experience WHERE id =: developerId);
query.setParameter("expericence", 3);
DELETE
Это ключевое слово используется для удаления одного или нескольких объектов. Пример использования:
Query query = session.createQuery("DELETE FROM Developer WHERE id = :developerId");
query.setParameter("developerId", 1);
SELECT
Если мы хотим получить запись из таблицы нашей БД, то мы должны использовать ключевое слово SELECT. Пример использования:
Query query = session.createQuery("SELECT D.lastName FROM Developer D");
List developers = query.list();
AS
В предыдущем примере мы использовали запись формы Developer D. С использованием опционального ключевого слова AS это будет выглядеть так:
Query query = session.createQuery("FROM Developer AS D");
List developers = query.list();
WHERE
В том случае, если мы хотим получить объекты, которые соответствуют опредленным параметрам, то мы должны использовать ключевое слово WHERE. На практике это выглядит следующим образом:
Query query = session.createQuery("FROM Developer D WHERE D.id = 1");
List developer = query.list();
ORDER BY
Жля того, чтобы отсортировать список объектов, полученных в результате запроса, мы должны применить ключевое слово ORDER BY. Нам необходимо указать параметр, по которому список будет отсортирован, и тип сортировки – по возрастанию (ASC) или по убыванию (DESC). В виде кода это выглядит так:
Query query =
session.createQuery("FROM Developer D WHERE experience
>
3 ORDER BY D.experience DESC");
GROUP BY
С помощью ключевого слова GROUP BY мы можем группировать данные, полученные из БД по какому-либо признаку. Вот простой пример применения данного ключевого слова:
Query query = session.createQuery("SELECT MAX(D.experience), D.lastName, D.specialty FROM Developer D GROUP BY D.lastName");
List developers = query.list();
Методы аггрегации
Язык запросов Hibernate (HQL) поддерживает различные методы агрегации, которые доступны и в SQL. HQL поддерживает следующие методы:
min(имя свойства)
Минимальное значение данного свойства.
max(имя свойства)
Максимальное значение данного свойства.
sum(имя свойства)
Сумма всех значений данного свойства.
avg(имя свойства)
Среднее арифметическое всех значений данного свойства
count(имя свойства)
Какое количество раз данное свойство встречается в результате.