Trabajar con páginas: LÍMITE y DESPLAZAMIENTO
Muy a menudo, los datos de una base de datos se recuperan en "páginas". Porque así es conveniente trabajar con listas grandes. Primero consultamos las filas 1 a 20, luego 21 a 40, y así sucesivamente.
Esta es una situación tan común que SQL tiene operadores especiales para este LÍMITE y DESPLAZAMIENTO.
Los análogos de estos operadores también están presentes en Hibernate. Solo que inmediatamente decidieron hacerlos en forma de métodos separados:
- setFirstResult() es análogo a OFFSET .
- setMaxResults() es análogo a LIMIT .
Escribir consultas usando estos métodos es muy fácil. Escribamos una consulta en la que solicitemos devolver 20 tareas a partir de 41. Así es como se verá:
Query<EmployeeTask> query = session.createQuery( “from EmployeeTask”, EmployeeTask.class);
query.setFirstResult(41);
query.setMaxResults(20);
List<EmployeeTask> resultLIst = query.list();
Ordenar resultados
Descubrimos cómo obtener parte de las cadenas de resultados de una consulta. El siguiente problema apremiante es la clasificación.
La clasificación en Hibernate se escribe directamente en la consulta HQL y generalmente se ve como se espera:
from Employee order by joinDate
Si desea cambiar el orden de clasificación, debe usar palabras familiares: asc y desc. Ejemplo:
from Employee order by joinDate desc
Al igual que en SQL, puede ordenar por varios campos:
from Employee order by joinDate desc, name asc
Además, el campo de clasificación se puede pasar como un parámetro:
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();
Funciones en HQL
Al igual que en SQL en HQL, puede usar varias funciones.
Aquí hay una lista de funciones agregadas que admite HQL:
Funciones agregadas | Descripción |
---|---|
contar() | Devuelve el número de filas |
suma() | Calcula la suma de valores |
min() | Devuelve el valor mínimo |
máx() | Devuelve el valor máximo |
promedio() | Devuelve la media |
Como recordará, las funciones agregadas son las que se pueden usar junto con group by. Agrupar por funciona exactamente igual que en SQL, por lo que no nos repetiremos.
Y, por supuesto, las funciones habituales . Con las funciones ordinarias, todo es mucho más simple: son realizadas por el servidor SQL, Hibernate solo necesita generar correctamente una consulta usándolas.
Por lo tanto, Hibernate admite todas las funciones que admite SQL Server. Y el tipo de servidor SQL se establece mediante el parámetro sqlDialect cuando configura su SessionFactory.
Encontremos el número de tareas asignadas a un usuario:
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