Arbeiten mit Seiten: LIMIT und OFFSET
Sehr oft werden Daten aus einer Datenbank in „Seiten“ abgerufen. Denn so lässt sich bequem mit großen Listen arbeiten. Wir fragen zuerst die Zeilen 1 bis 20 ab, dann 21 bis 40 und so weiter.
Dies kommt so häufig vor, dass SQL spezielle Operatoren für LIMIT und OFFSET hat.
Analoge dieser Operatoren sind auch in Hibernate vorhanden. Nur beschlossen sie sofort, sie in Form separater Methoden herzustellen:
- setFirstResult() ist analog zu OFFSET .
- setMaxResults() ist analog zu LIMIT .
Das Schreiben von Abfragen mit diesen Methoden ist sehr einfach. Schreiben wir eine Abfrage, in der wir beginnend mit 41 darum bitten, 20 Aufgaben zurückzugeben. So sieht es aus:
Query<EmployeeTask> query = session.createQuery( “from EmployeeTask”, EmployeeTask.class);
query.setFirstResult(41);
query.setMaxResults(20);
List<EmployeeTask> resultLIst = query.list();
Ergebnisse sortieren
Wir haben herausgefunden, wie man einen Teil der Ergebniszeichenfolgen einer Abfrage erhält. Das nächste dringende Problem ist das Sortieren.
Die Sortierung im Ruhezustand wird direkt in die HQL-Abfrage geschrieben und sieht allgemein erwartet aus:
from Employee order by joinDate
Wenn Sie die Sortierreihenfolge ändern möchten, müssen Sie bekannte Wörter verwenden: auf und ab. Beispiel:
from Employee order by joinDate desc
Genau wie in SQL können Sie nach mehreren Feldern sortieren:
from Employee order by joinDate desc, name asc
Zusätzlich kann das Sortierfeld als Parameter übergeben werden:
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();
Funktionen in HQL
Genau wie in SQL können Sie in HQL verschiedene Funktionen nutzen.
Hier ist eine Liste der Aggregatfunktionen , die HQL unterstützt:
Aggregatfunktionen | Beschreibung |
---|---|
zählen() | Gibt die Anzahl der Zeilen zurück |
Summe() | Berechnet die Summe der Werte |
Mindest() | Gibt den Mindestwert zurück |
max() | Gibt den Maximalwert zurück |
avg() | Gibt den Mittelwert zurück |
Wie Sie sich hoffentlich erinnern, sind Aggregatfunktionen diejenigen, die in Verbindung mit „Gruppieren nach“ verwendet werden können. Group By funktioniert genauso wie in SQL, wir wiederholen uns also nicht.
Und natürlich die gewohnten Funktionen . Bei gewöhnlichen Funktionen ist alles viel einfacher – sie werden vom SQL-Server ausgeführt, Hibernate muss mit ihnen nur eine korrekte Abfrage generieren.
Daher unterstützt Hibernate alle Funktionen, die SQL Server unterstützt. Und der Typ des SQL-Servers wird durch den Parameter sqlDialect festgelegt, wenn Sie Ihre SessionFactory konfigurieren.
Lassen Sie uns die Anzahl der einem Benutzer zugewiesenen Aufgaben ermitteln:
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();
GO TO FULL VERSION