JPA/JPQL

[JPA] 페이징 API

IT록흐 2023. 6. 13. 18:50
반응형

 

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