0. 개요
- JPQL에서 페이징을 사용하는 방법에 대해서 알아보자.
1. 개념
a) 페이징 이란
- 페이징이란 조회된 결과를 가져올 때, 몇 번째 데이터부터 몇 개를 가져올지 설정하는 것이다.
- Oracle이나 MySQL을 사용하는 경우, 페이징을 설정하기 위한 쿼리가 굉장히 복잡하다.
- 하지만, JPQL은 이를 2가지 메서드로 추상화하여 매우 편리하게 사용할 수 있다.
2. 페이징 API
- JPA는 복잡한 페이징 쿼리를 다음 2가지 메서드(= API)로 추상화하여 제공한다.
- 이 2가지 메서드는 설정한 방언에 따라 페이징 쿼리로 변환된다.
a) setFirstResult(int startPosition)
- setFirstResult() 메서드는 조회된 결과를 가져올 때의 시작 위치를 설정한다.
- 시작 위치는 0부터 시작한다.
b) setMaxResults(int maxResult)
- setMaxResults() 메서드는 조회된 결과를 가져올 때 가져올 데이터의 개수를 설정한다.
- 시작 위치로부터 몇개의 데이터를 가져올지 설정한다.
c) 예시 코드
- 위에서 소개한 페이징 메서드 2개를 어떻게 활용하는지 다음 예시를 통해서 알아보자.
List<Player> result =
em.createQuery("select p from Player p order by p.age desc", Player.class)
.setFirstResult(1)
.setMaxResults(10)
.getResultList();
for(Player player : result) {
System.out.println("player = " + player);
}
- 위에서 작성한 쿼리는 다음과 같은 의미를 가진다.
→ Player 테이블의 모든 데이터를 나이 순으로 정렬하여 조회한다.
→ 조회된 결과의 1번 데이터부터 10개의 데이터를 가져온다.
c) 예시 코드 실행 결과
- 위의 코드를 실제로 실행해보자.
- DB에는 다음과 같은 데이터가 저장되어 있다.
- 위의 코드를 실행하면 다음과 같은 쿼리를 확인할 수 있다.
- 위의 쿼리에서 확인할 수 있듯이, limit과 offset이 설정되는 것을 확인할 수 있다.
- 이 부분이 페이징의 범위가 설정된 것이다.
- 그렇다면 결과는 어떻게 나올까?
- 결과를 확인해보면 선수 한명만 출력된 것을 확인할 수 있다.
- DB에는 2개의 선수 데이터만을 가지고 있다.
- select 쿼리의 내용은 모든 선수를 나이 순으로 조회하고, 1번 데이터부터 10개를 가져오도록 페이징을 설정하였다.
- 그러므로 0번 데이터인 박지성 선수를 제외하고 리오넬 메시부터 조회한 것이다.
'Back-end > JPA 개념' 카테고리의 다른 글
27. JPQL - 서브 쿼리 & 타입 표현 (0) | 2022.04.27 |
---|---|
26. JPQL - 조인 (0) | 2022.04.26 |
24. JPQL - 프로젝션(Projection, Select) (0) | 2022.04.22 |
23. JPQL - 기본 기능(파라미터 바인딩, 결과 조회, 쿼리의 종류) (0) | 2022.04.21 |
22. JPQL - JPQL에 대하여 (0) | 2022.04.20 |
댓글