Arbeta med sidor: LIMIT och OFFSET

Mycket ofta hämtas data från en databas i "sidor". För det är så det är bekvämt att jobba med stora listor. Vi frågar först raderna 1 till 20, sedan 21 till 40 och så vidare.

Detta är en så vanlig situation att SQL har speciella operatorer för denna LIMIT och OFFSET.

Analoger av dessa operatörer finns också i Hibernate. Bara de bestämde sig omedelbart för att göra dem i form av separata metoder:

  • setFirstResult() är analog med OFFSET .
  • setMaxResults() är analog med LIMIT .

Att skriva frågor med dessa metoder är mycket enkelt. Låt oss skriva en fråga där vi ber att få returnera 20 uppgifter med start från 41. Så här kommer det att se ut:

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

Sortera resultat

Vi kom på hur man får en del av resultatsträngarna för en fråga. Nästa angelägna fråga är sortering.

Sortering i Hibernate skrivs direkt i HQL-frågan och ser allmänt förväntat ut:

from Employee order by joinDate

Om du vill ändra sorteringsordningen måste du använda bekanta ord: asc och desc. Exempel:

from Employee order by joinDate desc

Precis som i SQL kan du sortera efter flera fält:

from Employee order by joinDate desc, name asc

Dessutom kan sorteringsfältet skickas 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

Precis som i SQL i HQL kan du använda olika funktioner.

Här är en lista över samlade funktioner som HQL stöder:

Aggregerade funktioner Beskrivning
räkna() Returnerar antalet rader
belopp() Beräknar summan av värden
min() Returnerar minimivärdet
max() Returnerar det maximala värdet
avg() Returnerar medelvärdet

Som du förhoppningsvis kommer ihåg är aggregerade funktioner de som kan användas tillsammans med group by. Group By fungerar precis som i SQL, så vi kommer inte att upprepa oss.

Och, naturligtvis, de vanliga funktionerna . Med vanliga funktioner är allt mycket enklare - de utförs av SQL-servern, Hibernate behöver bara skapa en fråga korrekt med hjälp av dem.

Därför stöder Hibernate alla funktioner som SQL Server stöder. Och typen av SQL-server ställs in av parametern sqlDialect när du konfigurerar din SessionFactory.

Låt oss ta reda på antalet uppgifter som tilldelats en användare:

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