Spring/Spring Data JPA
Spring Data JPA - 페이징과 정렬
jddng
2022. 3. 21. 14:26
728x90
반응형
페이징과 정렬

페이징과 정렬
- 파라미터로 Pageable을 받을 수 있다.
- Pageable은 인터페이스, 실제로는 PageRequest 구현체가 생성된다.
- 요청 파라미터
- page : 현재 페이지, 0부터 시작
- size : 한 페이지에 노출할 데이터 건수
- sort : 정렬 조건을 정의
예시 : /members?page=0&size=3&sort=id,desc&sort=username,desc
@GetMapping("/members")
public Page<Member> list(Pageable pageable) {
Page<Member> page = memberRepository.findAll(pageable);
return page;
}
@Qualifier
- 페이징 정보가 둘 이상인 경우 사용
- @Qualifier에 접두사명 추가 "접두사명_xxx"
예시 : /members?member_page=0&order_page=1
public String list(
@Qualifier("member") Pageable memberPageable,
@Qualifier("order") Pageable orderPageable, ...){
...
}
기본값 설정
- 글로벌 설정 - application.properties
spring.data.web.pageable.default-page-size=20 // 기본 페이지 사이즈
spring.data.web.pageable.max-page-size=2000 // 최대 페이지 사이즈
- 개별 설정 - @PageableDefault 어노테이션 사용
@RequestMapping(value = "/members_page", method = RequestMethod.GET)
public String list(
@PageableDefault(size = 12, sort = “username”,direction = Sort.Direction.DESC)
Pageable pageable) {
...
}
Page의 map() 기능
- 엔티티를 API로 노출하면 다양한 문제가 발생, 따라서 DTO로 변환해서 반환하는 것이 좋다.
- Page는 map()을 지원해서 내부 데이터를 다른 것으로 변경할 수 있다.
@GetMapping("/members")
public Page<MemberDto> list(Pageable pageable) {
Page<Member> page = memberRepository.findAll(pageable);
Page<MemberDto> pageDto = page.map(MemberDto::new);
return pageDto;
}
//코드 최적화
@GetMapping("/members")
public Page<MemberDto> list(Pageable pageable) {
return memberRepository.findAll(pageable).map(MemberDto::new);
}
728x90
반응형