Travailler avec des pages : LIMITE et DÉCALAGE

Très souvent, les données d'une base de données sont récupérées dans des « pages ». Parce que c'est comme ça qu'il est pratique de travailler avec de grandes listes. Nous interrogeons d'abord les lignes 1 à 20, puis 21 à 40, et ainsi de suite.

Il s'agit d'une situation si courante que SQL a des opérateurs spéciaux pour ces LIMIT et OFFSET.

Des analogues de ces opérateurs sont également présents dans Hibernate. Seulement, ils ont immédiatement décidé de les fabriquer sous la forme de méthodes distinctes:

  • setFirstResult() est analogue à OFFSET .
  • setMaxResults() est analogue à LIMIT .

Écrire des requêtes à l'aide de ces méthodes est très simple. Écrivons une requête où nous demandons de renvoyer 20 tâches à partir de 41. Voici à quoi cela ressemblera :

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

Trier les résultats

Nous avons compris comment obtenir une partie des chaînes de résultat d'une requête. Le prochain problème urgent est le tri.

Le tri dans Hibernate est écrit directement dans la requête HQL et semble généralement attendu :

from Employee order by joinDate

Si vous souhaitez modifier l'ordre de tri, vous devez utiliser des mots familiers : asc et desc. Exemple:

from Employee order by joinDate desc

Tout comme en SQL, vous pouvez trier par plusieurs champs :

from Employee order by joinDate desc, name asc

De plus, le champ de tri peut être passé en paramètre :

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

Fonctions en HQL

Tout comme dans SQL dans HQL, vous pouvez utiliser diverses fonctions.

Voici une liste des fonctions d'agrégation prises en charge par HQL :

Fonctions d'agrégation Description
compter() Renvoie le nombre de lignes
somme() Calcule la somme des valeurs
min() Renvoie la valeur minimale
maximum() Renvoie la valeur maximale
moy() Renvoie la moyenne

Comme vous vous en souvenez, les fonctions d'agrégation sont celles qui peuvent être utilisées conjointement avec group by. Group By fonctionne exactement de la même manière qu'en SQL, nous ne nous répéterons donc pas.

Et, bien sûr, les fonctions habituelles . Avec les fonctions ordinaires, tout est beaucoup plus simple - elles sont exécutées par le serveur SQL, Hibernate n'a qu'à générer correctement une requête en les utilisant.

Par conséquent, Hibernate prend en charge toutes les fonctionnalités prises en charge par SQL Server. Et le type du serveur SQL est défini par le paramètre sqlDialect lorsque vous configurez votre SessionFactory.

Trouvons le nombre de tâches assignées à un utilisateur :

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