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 Ivanovich”);
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 Ivanovich”);
Integer count = query.uniqueResult();