페이지 작업: LIMIT 및 OFFSET

매우 자주 데이터베이스의 데이터는 "페이지"에서 검색됩니다. 큰 목록으로 작업하는 것이 편리하기 때문입니다. 먼저 행 1에서 20까지 쿼리한 다음 21에서 40까지 쿼리합니다.

이것은 SQL에 이 LIMIT 및 OFFSET에 대한 특수 연산자가 있는 일반적인 상황입니다.

이러한 연산자의 아날로그는 Hibernate에도 있습니다. 그들은 즉시 별도의 방법으로 만들기로 결정했습니다.

  • setFirstResult() 는 OFFSET 과 유사합니다 .
  • setMaxResults() 는 LIMIT 와 유사합니다 .

이러한 방법을 사용하여 쿼리를 작성하는 것은 매우 쉽습니다. 41부터 시작하여 20개의 작업을 반환하도록 요청하는 쿼리를 작성해 보겠습니다. 다음과 같이 표시됩니다.

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

결과 정렬

쿼리 결과 문자열의 일부를 가져오는 방법을 알아냈습니다. 다음 시급한 문제는 정렬입니다.

Hibernate에서의 정렬은 HQL 쿼리에 직접 작성되며 일반적으로 예상되는 것처럼 보입니다.

from Employee order by joinDate

정렬 순서를 변경하려면 익숙한 단어인 asc 및 desc를 사용해야 합니다. 예:

from Employee order by joinDate desc

SQL에서와 마찬가지로 여러 필드를 기준으로 정렬할 수 있습니다.

from Employee order by joinDate desc, name asc

또한 정렬 필드를 매개변수로 전달할 수 있습니다.

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

HQL의 기능

HQL의 SQL과 마찬가지로 다양한 기능을 사용할 수 있습니다.

다음은 HQL이 지원하는 집계 함수 목록입니다 .

집계 함수 설명
세다() 행 수를 반환합니다.
합집합() 값의 합계를 계산합니다.
분() 최소값을 반환합니다.
최대() 최대값을 반환합니다.
평균() 평균을 반환

잘 기억하고 있듯이 집계 함수는 group by와 함께 사용할 수 있는 함수입니다. Group By는 SQL에서와 정확히 동일하게 작동하므로 반복하지 않겠습니다.

그리고 물론 일반적인 기능 . 일반 기능을 사용하면 모든 것이 훨씬 간단합니다. SQL 서버에서 수행되며 Hibernate는 이를 사용하여 쿼리를 올바르게 생성하기만 하면 됩니다.

따라서 Hibernate는 SQL Server가 지원하는 모든 기능을 지원합니다. 그리고 SQL 서버의 유형은 SessionFactory를 구성할 때 sqlDialect 매개변수에 의해 설정됩니다.

사용자에게 할당된 작업의 수를 찾아봅시다.

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