Arbejde med sider: LIMIT og OFFSET
Meget ofte hentes data fra en database i "sider". For sådan er det praktisk at arbejde med store lister. Vi forespørger først række 1 til 20, derefter 21 til 40, og så videre.
Dette er så almindelig en situation, at SQL har specielle operatorer for denne LIMIT og OFFSET.
Analoger af disse operatorer er også til stede i Hibernate. Kun de besluttede straks at lave dem i form af separate metoder:
- setFirstResult() er analog med OFFSET .
- setMaxResults() er analog med LIMIT .
Det er meget nemt at skrive forespørgsler ved hjælp af disse metoder. Lad os skrive en forespørgsel, hvor vi beder om at returnere 20 opgaver fra 41. Sådan kommer det til at se ud:
Query<EmployeeTask> query = session.createQuery( “from EmployeeTask”, EmployeeTask.class);
query.setFirstResult(41);
query.setMaxResults(20);
List<EmployeeTask> resultLIst = query.list();
Sorter resultater
Vi fandt ud af, hvordan man får en del af resultatstrengene i en forespørgsel. Det næste presserende spørgsmål er sortering.
Sortering i Hibernate skrives direkte i HQL-forespørgslen og ser generelt forventet ud:
from Employee order by joinDate
Hvis du vil ændre sorteringsrækkefølgen, skal du bruge velkendte ord: asc og desc. Eksempel:
from Employee order by joinDate desc
Ligesom i SQL kan du sortere efter flere felter:
from Employee order by joinDate desc, name asc
Derudover kan sorteringsfeltet sendes som en parameter:
String hql = "from EmployeeTask where employee.name = :username order by :ord";
Query<EmployeeTask> query = session.createQuery( hql, EmployeeTask.class);
query.setParameter(“username”, “Ivan Ivanович”);
query.setParameter(“ord”, “name”);
List<EmployeeTask> resultLIst = query.list();
Funktioner i HQL
Ligesom i SQL i HQL kan du bruge forskellige funktioner.
Her er en liste over samlede funktioner , som HQL understøtter:
Samlede funktioner | Beskrivelse |
---|---|
tælle() | Returnerer antallet af rækker |
sum() | Beregner summen af værdier |
min() | Returnerer minimumsværdien |
max() | Returnerer den maksimale værdi |
gennemsnit() | Returnerer middelværdien |
Som du forhåbentlig husker, er aggregerede funktioner dem, der kan bruges i forbindelse med gruppe efter. Group By fungerer nøjagtigt det samme som i SQL, så vi gentager os ikke.
Og selvfølgelig de sædvanlige funktioner . Med almindelige funktioner er alt meget enklere - de udføres af SQL-serveren, Hibernate behøver kun at generere en forespørgsel korrekt ved hjælp af dem.
Derfor understøtter Hibernate alle de funktioner, som SQL Server understøtter. Og typen af SQL-serveren indstilles af parameteren sqlDialect, når du konfigurerer din SessionFactory.
Lad os finde antallet af opgaver, der er tildelt en bruger:
String hql = "select count(*) from EmployeeTask where employee.name = :username ";
Query<Integer> query = session.createQuery( hql, Integer.class);
query.setParameter(“username”, “Ivan Ivanович”);
Integer count = query.uniqueResult();
GO TO FULL VERSION