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();
GO TO FULL VERSION