웹(Web)/백엔드(Backend)

Spring Data JPA 페이징

SK_MOUSE 2022. 9. 1. 00:52
페이징
data : 5, offset : 3

Spring Data JPA 에서 페이징 및 슬라이스에 대해 알아보겠다.

Spring Data JPA 페이징

Paging(페이징)

페이징을 하기 위한 메소드는 아래와 같이 구성한다.

public interface MemberRepository extends Repository<Member, Long> { Page<Member> findByAge(int age, Pageable pageable); }

 

data : 5, offset : 3 으로 나누는것을 아래처럼 보여준다.

@Test public void page() throws Exception { ​​​​​​​​​//5개의 데이터 given ​​​​​​​​​memberRepository.save(new Member("member1", 10)); ​​​​​​​​​memberRepository.save(new Member("member2", 10)); ​​​​​​​​​memberRepository.save(new Member("member3", 10)); ​​​​​​​​​memberRepository.save(new Member("member4", 10)); ​​​​​​​​​memberRepository.save(new Member("member5", 10)); ​​​​​​​​​ ​​​​​​​​​//when : PageRequest를 인자로 보통 넘겨준다. ​​​​​​​​​PageRequest pageRequest = PageRequest.of(0, 3, Sort.by(Sort.Direction.DESC, ​​​​​​​​"username")); ​​​​​​​​​Page<Member> page = memberRepository.findByAge(10, pageRequest); ​​​​​​​​​//then ​​​​​​​​​List<Member> content = page.getContent(); //조회된 데이터 ​​​​​​​​​assertThat(content.size()).isEqualTo(3); //조회된 데이터 수 ​​​​​​​​​assertThat(page.getTotalElements()).isEqualTo(5); //전체 데이터 수 ​​​​​​​​​assertThat(page.getNumber()).isEqualTo(0); //페이지 번호 ​​​​​​​​​assertThat(page.getTotalPages()).isEqualTo(2); //전체 페이지 번호 ​​​​​​​​​assertThat(page.isFirst()).isTrue(); //첫번째 항목인가? ​​​​​​​​​assertThat(page.hasNext()).isTrue(); //다음 페이지가 있는가? }

 

 


위에서 JPA 활용2에서 말한 내용처럼

엔티티를 그대로 노출(반환)해서는 안된다!

@Test public void page() throws Exception { ​​​​/* 중략 */ ‌​Page<Member> page = memberRepository.findByAge(10, pageRequest); ‌​ ‌​​​//아래와 같이 Dto에 감싸서 반환해야함. ‌​Page<MemberDto> toMap = page.map(m -> new MemberDto(m.getId(), m.getUsername(), m.getTeam()); }

아래와 같이 Member를 그대로 Page로 반환하는게 아니라 MemberDto로 변경해서 보내야함.

반응형