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();
GO TO FULL VERSION