반응형
MySQL, ORACLE의 페이징 처리는 복잡하기로 유명하다.
JPA는 API 2개만 알면 페이징 구현이 가능하다. 그리고 JPA가 알아서 DB에 맞추어 복잡한 페이징 SQL을 자동 생성한다.
페이징 쿼리 1)
String jpql = "select m from Member m order by m.name desc";
List<Member> resultList = entityManager.createQuery(jpql, Member.class)
.setFirstResult(10)
.setMaxResults(20)
.getResultList();
페이징 쿼리 2)
String jpql = "SELECT e FROM Employee e ORDER BY e.id";
TypedQuery<Employee> query = entityManager.createQuery(jpql, Employee.class);
int pageSize = 10; // 페이지당 데이터 개수
int pageNumber = 2; // 조회할 페이지 번호
query.setFirstResult((pageNumber - 1) * pageSize); // 시작 위치 설정
query.setMaxResults(pageSize); // 페이지당 데이터 개수 설정
List<Employee> resultList = query.getResultList();
엔티티매니저는 createQuery 메소드로 쿼리실행객체를 생성한다. 엔티티매니저가 생성하는 쿼리객체는 결과를 어떻게 가져올지 설정할 수 있다. 그 중 페이징과 관련된 설정은 2가지이다.
1) Query setFirstResult(int startPosition)
첫 번째 결과( FirstResult )를 어떤 포지션으로 할 것인지를 Setting하는 메소드이다. 설정된 위치(startPoisition)부터 데이터를 가져온다.
2) Query setMaxResults(int maxResult)
최대결과개수이다. 최대 몇개의 결과를 가져올 수 있는지 세팅하는 메소드이다. 10이라 설정하면 startPosition부터 10개의 데이터를 가지고 온다.
반응형
'JPA > JPQL' 카테고리의 다른 글
[JPA] 묵시적 조인보다는 명시적 조인 (0) | 2023.06.15 |
---|---|
[JPA] 쿼리결과 변환하기 ( JPQL 함수 ) (0) | 2023.06.14 |
[JPA] 서브쿼리 ( SubQuery ) (0) | 2023.06.14 |
[JPA] JOIN 과 JOIN FETCH의 차이 (0) | 2023.06.14 |
[JPA] JPQL이란? (0) | 2023.06.13 |