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