Munka oldalakkal: LIMIT és OFFSET

Nagyon gyakran az adatbázisból származó adatokat „oldalakon” kérik le. Mert így kényelmes nagy listákkal dolgozni. Először az 1–20., majd a 21–40. sorokat kérdezzük le, és így tovább.

Ez olyan gyakori helyzet, hogy az SQL-nek speciális operátorai vannak ehhez a LIMIT-hez és OFFSET-hez.

Ezen operátorok analógjai a Hibernate-ban is megtalálhatók. Csak ők azonnal úgy döntöttek, hogy külön módszerek formájában készítik őket:

  • A setFirstResult() az OFFSET analógja .
  • A setMaxResults() a LIMIT analógja .

A lekérdezések írása ezekkel a módszerekkel nagyon egyszerű. Írjunk egy lekérdezést, ahol 20 feladatot kérünk vissza 41-től kezdve. Így fog kinézni:

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

Eredmények rendezése

Kitaláltuk, hogyan kapjuk meg a lekérdezés eredménykarakterláncainak egy részét. A következő sürgető kérdés a válogatás.

A hibernált rendezés közvetlenül a HQL-lekérdezésbe kerül, és általában elvártnak tűnik:

from Employee order by joinDate

Ha módosítani szeretné a rendezési sorrendet, akkor ismerős szavakat kell használnia: asc és desc. Példa:

from Employee order by joinDate desc

Csakúgy, mint az SQL-ben, több mező szerint is rendezhet:

from Employee order by joinDate desc, name asc

Ezenkívül a rendezési mező paraméterként átadható:

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();

Funkciók a HQL-ben

Csakúgy, mint az SQL-ben a HQL-ben, különféle funkciókat használhat.

Íme a HQL által támogatott összesített függvények listája :

Összesített függvények Leírás
számol() A sorok számát adja vissza
összeg() Kiszámítja az értékek összegét
min() A minimális értéket adja vissza
max() A maximális értéket adja vissza
avg() Az átlagot adja vissza

Amint remélhetőleg emlékszik, az összesített függvények azok, amelyek a group by funkcióval együtt használhatók. A Group By pontosan ugyanúgy működik, mint az SQL-ben, ezért nem ismételjük magunkat.

És természetesen a szokásos funkciók . A szokásos funkciókkal minden sokkal egyszerűbb - az SQL-kiszolgáló hajtja végre, a Hibernate-nek csak helyesen kell lekérdezést generálnia ezek használatával.

Ezért a Hibernate támogatja az SQL Server által támogatott összes szolgáltatást. Az SQL-kiszolgáló típusát pedig az sqlDialect paraméter állítja be a SessionFactory konfigurálásakor.

Nézzük meg a felhasználóhoz rendelt feladatok számát:

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();