Praca ze stronami: LIMIT i OFFSET

Bardzo często dane z bazy danych pobierane są w „stronach”. Ponieważ tak wygodnie jest pracować z dużymi listami. Najpierw sprawdzamy wiersze od 1 do 20, następnie od 21 do 40 i tak dalej.

Jest to tak powszechna sytuacja, że ​​SQL ma specjalne operatory dla tego LIMIT i OFFSET.

Analogi tych operatorów są również obecne w Hibernate. Tylko oni od razu postanowili zrobić je w formie odrębnych metod:

  • setFirstResult() jest analogiczne do OFFSET .
  • setMaxResults() jest analogiczna do LIMIT .

Pisanie zapytań przy użyciu tych metod jest bardzo łatwe. Napiszmy zapytanie, w którym poprosimy o zwrócenie 20 zadań zaczynając od 41. Tak to będzie wyglądać:

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

Sortuj wyniki

Wymyśliliśmy, jak uzyskać część ciągów wynikowych zapytania. Następną pilną kwestią jest sortowanie.

Sortowanie w Hibernate jest zapisywane bezpośrednio w zapytaniu HQL i ogólnie wygląda tak:

from Employee order by joinDate

Jeśli chcesz zmienić kolejność sortowania, musisz użyć znanych słów: asc i desc. Przykład:

from Employee order by joinDate desc

Podobnie jak w SQL, możesz sortować według wielu pól:

from Employee order by joinDate desc, name asc

Dodatkowo pole sortowania można przekazać jako parametr:

String hql = "from EmployeeTask where employee.name = :username order by :ord";
Query<EmployeeTask> query = session.createQuery( hql, EmployeeTask.class);
query.setParameter(“username”, “Ivan Ivanovich”);
query.setParameter(“ord”, “name”);

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

Funkcje w HQL

Podobnie jak w SQL w HQL, możesz korzystać z różnych funkcji.

Oto lista funkcji agregujących obsługiwanych przez HQL:

Funkcje agregujące Opis
liczyć() Zwraca liczbę wierszy
suma() Oblicza sumę wartości
min() Zwraca wartość minimalną
maks() Zwraca wartość maksymalną
średnia() Zwraca średnią

Jak zapewne pamiętasz, funkcje agregujące to te, których można używać w połączeniu z funkcją grupowania według. Group By działa dokładnie tak samo jak w SQL, więc nie będziemy się powtarzać.

I oczywiście zwykłe funkcje . Przy zwykłych funkcjach wszystko jest dużo prostsze - wykonuje je serwer SQL, Hibernate musi jedynie poprawnie wygenerować zapytanie z ich wykorzystaniem.

Dlatego Hibernate obsługuje wszystkie funkcje obsługiwane przez SQL Server. A typ serwera SQL jest ustawiany przez parametr sqlDialect podczas konfigurowania SessionFactory.

Znajdźmy liczbę zadań przypisanych do użytkownika:

String hql = "select count(*) from EmployeeTask where employee.name = :username ";
Query<Integer> query = session.createQuery( hql, Integer.class);
query.setParameter(“username”, “Ivan Ivanovich”);
Integer count = query.uniqueResult();