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