Lavorare con le pagine: LIMIT e OFFSET

Molto spesso, i dati di un database vengono recuperati in "pagine". Perché è così che è conveniente lavorare con elenchi di grandi dimensioni. Per prima cosa interroghiamo le righe da 1 a 20, quindi da 21 a 40 e così via.

Questa è una situazione così comune che SQL ha operatori speciali per questo LIMIT e OFFSET.

Analoghi di questi operatori sono presenti anche in Hibernate. Solo loro hanno deciso immediatamente di realizzarli sotto forma di metodi separati:

  • setFirstResult() è analogo a OFFSET .
  • setMaxResults() è analogo a LIMIT .

Scrivere query utilizzando questi metodi è molto semplice. Scriviamo una query in cui chiediamo di restituire 20 attività a partire da 41. Ecco come apparirà:

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

Ordina i risultati

Abbiamo capito come ottenere parte delle stringhe di risultato di una query. Il prossimo problema urgente è lo smistamento.

L'ordinamento in Hibernate è scritto direttamente nella query HQL e sembra generalmente previsto:

from Employee order by joinDate

Se vuoi cambiare l'ordinamento, devi usare parole familiari: asc e desc. Esempio:

from Employee order by joinDate desc

Proprio come in SQL, puoi ordinare per più campi:

from Employee order by joinDate desc, name asc

Inoltre, il campo sort può essere passato come parametro:

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

Funzioni in HQL

Proprio come in SQL in HQL, puoi utilizzare varie funzioni.

Ecco un elenco di funzioni aggregate supportate da HQL:

Funzioni aggregate Descrizione
contare() Restituisce il numero di righe
somma() Calcola la somma dei valori
minimo() Restituisce il valore minimo
massimo() Restituisce il valore massimo
media() Restituisce la media

Come si spera ricorderete, le funzioni di aggregazione sono quelle che possono essere utilizzate insieme a group by. Group By funziona esattamente come in SQL, quindi non ci ripeteremo.

E, naturalmente, le solite funzioni . Con le funzioni ordinarie, tutto è molto più semplice: vengono eseguite dal server SQL, Hibernate deve solo generare correttamente una query utilizzandole.

Pertanto, Hibernate supporta tutte le funzionalità supportate da SQL Server. E il tipo di server SQL è impostato dal parametro sqlDialect quando si configura SessionFactory.

Troviamo il numero di attività assegnate a un utente:

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