스프링 데이터 JPA는 페이징과 정렬을 쉽게 구현하도록 Page
와 Slice
두 가지 인터페이스를 제공한다.
// service
PageRequest pageRequest = PageRequest.of(조회 페이지, 조회 데이터의 수, Sort.Direction.DESC, 정렬 필드명);
Page<Member> members = memberRepository.findByAge(age, pageRequest);
// repository
public interface MemberRepository extends JpaRepository<Member, Long> {
// paging 처리(반환타입 Page인터페이스)
Page<Member> findByAge(int age, Pageable pageable);
}
Pageable
인터페이스를 구현한 PageRequest
객체를 사용한다. 첫 번째 파라미터에는 현재 페이지(0 부터 시작함)를 두 번째 파라미터에는 조회할 데이터의 수를 적으면 된다.PageRequest
객체는 필요하다면 sorting
기능을 제공하므로 세 번째 파라미터에 정렬 방향성을, 네 번째 파라미터에는 정렬 기준이 되는 field
를 설정할 수 있다.Page
인터페이스로 반환을 받으면 스프링 데이터 JPA는 내부적으로 count
쿼리를 한번 더 날려준다.select member0_.member_id as member_i1_0_, member0_.age as age2_0_, member0_.team_id as team_id4_0_, member0_.username as username3_0_ from member member0_ where member0_.age=20 order by member0_.username desc limit 5;
select count(member0_.member_id) as col_0_0_ from member member0_ where member0_.age=20;
// service
PageRequest pageRequest = PageRequest.of(조회 페이지, 조회 데이터의 수, Sort.Direction.DESC, 정렬 필드명);
Page<Member> members = memberRepository.findByAge(age, pageRequest);
// repository
public interface MemberRepository extends JpaRepository<Member, Long> {
// paging 처리(반환타입 Slice인터페이스)
Slice<Member> findByAge(int age, Pageable pageable);
}
조회 데이터의 수 + 1
로 조회를 하여 다음 페이지가 존재하는지 확인이 가능한 페이징 방식(모바일 리스트 더보기 기능에 많이 사용되고 있음)select member0_.member_id as member_i1_0_, member0_.age as age2_0_, member0_.team_id as team_id4_0_, member0_.username as username3_0_ from member member0_ where member0_.age=20 order by member0_.username desc limit 6;