SpringDataJPA

페이징과 정렬

쿠카이든 2022. 6. 21. 11:44
728x90
  • 스프링 데이터 JPA는 쿼리 메소드에 페이징과 정렬 기능을 사용할 수 있도록 2가지 특별한 파라미터를 제공한다.
    • org.springframework.data.domain.Sort: 정렬 기능
    • org.springframework.data.domain.Pageable: 페이징 기능(내부에 Sort 포함)
  • 파라미터에 Pageable을 사용하면 반환 타입으로 List나 org.springframework.data.domain.Page를 사용할 수 있다.
  • Page를 사용하면 스프링 데이터 JPA는 페이징 기능을 제공하기 위해 검색된 전체 데이터 건수를 조회하는 count 쿼리를 추가로 호출한다.
//count 쿼리 사용
Page<Member> findByName(String name, Pageable pageable);

//count 쿼리 사용 안 함
List<Member> findByName(String name, Pageable pageable);

List<Member> findByName(String name, Sort sort);
페이징과 정렬을 사용하는 예제 코드
  • 검색 조건: 이름이 김으로 시작하는 회원
  • 정렬 조건: 이름으로 내림차순
  • 페이징 조건: 첫 번째 페이지, 페이지당 보여줄 데이터는 10건
public interface MemberRepository extends Repository<Member, Long> {
    Page<Member> findByNameStartingWith (String name, Pageable pageable);
}
//페이징 조건과 정렬 조건 설정
PageRequest pageRequest = new PageRequest(0, 10, new Sort(Direction.DESC, "name"));

Page<Member> result = memberRepository.findByNameStartingWith("김", pageRequest);

List<Member> members = result.getContent(); //조회된 데이터
int totalPages = result.getTotalPages(); //전체 페이지 수
boolean hasNextPage = result.hasNextPage(); //다음 페이지 존재 여부

 

출처 : JAVA 표준 ORM JPA 프로그래밍 (저자 : 김영한)

728x90