반응형
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로 변경해서 보내야함.
반응형
'웹(Web) > 백엔드(Backend)' 카테고리의 다른 글
Nexus 3.xx 설치/실행 오류 해결(Windows 환경) (0) | 2023.11.18 |
---|---|
[SpringBoot] java record와 DTO에 관하여... (0) | 2023.05.12 |
Intellij 한번에 변수 이름 바꾸는 단축키 (0) | 2022.08.31 |
Spring Data JPA @Query 활용법(JPQL, DTO) (0) | 2022.08.31 |
Java로 배우는 디자인패턴 (0) | 2022.07.14 |