JavaRush/Java курси/Модуль 4. Робота з БД/Обмеження довжини запиту

Обмеження довжини запиту

Відкрита

1. Робота зі сторінками: LIMIT та OFFSET

Дуже часто інформація з бази даних витягується сторінками. Тому що саме так зручно працювати із великими списками. Спочатку зробимо запит на рядки з 1 до 20, потім з 21 до 40 і так далі.

Це настільки поширена ситуація, що в SQL з'явилися спеціальні оператори для цього — LIMIT та OFFSET.

Аналоги цих операторів є і в Hibernate. Тільки їх одразу вирішили зробити у вигляді окремих методів:

  • setFirstResult() — аналог OFFSET.
  • setMaxResults() — аналог LIMIT.

Писати запити з цими методами дуже просто. Давай напишемо запит, де попросимо повернути 20 завдань, починаючи з 41. Ось як це виглядатиме:

Query<EmployeeTask> query = session.createQuery( "from EmployeeTask", EmployeeTask.class);
query.setFirstResult(41);
query.setMaxResults(20);
List<EmployeeTask> resultLIst = query.list();

2. Сортування результатів

Як отримувати частину рядків результату запиту, ми розібралися. Наступне питання — сортування.

Сортування в Hibernate пишеться прямо в HQL-запиті і виглядає загалом очікувано:

from Employee order by joinDate

Якщо ти хочеш змінити порядок сортування, потрібно використовувати знайомі слова: asc і desc. Приклад:

from Employee order by joinDate desc

Так само, як і в SQL, ти можеш сортувати за кількома полями:

from Employee order by joinDate desc, name asc

До того ж, поле для сортування можна передати як параметр:

String hql = "з EmployeeTask where employee.name = :username order by :ord";
Query<EmployeeTask> query = session.createQuery( hql, EmployeeTask.class);
query.setParameter("username", "Іван Іванович");
query.setParameter(“ord”, “name”);

List<EmployeeTask> resultLIst = query.list();

3. Функції в HQL

Так само, як і в SQL у HQL, можна використовувати різні функції.

Ось список агрегатних функцій, які підтримує HQL:

Агрегатні функції Опис
count() Повертає кількість рядків
sum() Рахує суму значень
min() Повертає мінімальне значення
max() Повертає максимальне значення
avg() Повертає середнє значення

Як ти, сподіваюся, пам'ятаєш, агрегатні функції — це ті, які можна використовувати разом із group by. Group By працює так само, як у SQL, тому повторюватися не будемо.

Ну і, звісно, звичайні функції. Зі звичайними функціями все набагато простіше — їх виконує SQL-сервер, Hibernate потрібно лише правильно згенерувати запит з їх використанням.

Тому Hibernate підтримує всі функції, які підтримує SQL-сервер. А тип SQL-сервера встановлюється параметром sqlDialect, коли конфігуруєш свій SessionFactory.

Давай знайдемо кількість завдань, призначених для користувача:

String hql = "select count(*) from EmployeeTask where employee.name = :username ";
Query<Integer> query = session.createQuery( hql, Integer.class);
query.setParameter("username", "Іван Іванович");
Integer count = query.uniqueResult();
1
Задача
Модуль 4. Робота з БД,  10 рівень4 лекція
Недоступна
setFirstResult і setMaxResults
task1008
1
Задача
Модуль 4. Робота з БД,  10 рівень4 лекція
Недоступна
Функції в HQL
task1009
Коментарі
  • популярні
  • нові
  • старі
Щоб залишити коментар, потрібно ввійти в систему
Для цієї сторінки немає коментарів.