-
Spring Data JPA - 페이징과 정렬Spring/Spring Data JPA 2022. 3. 21. 14:26728x90반응형
페이징과 정렬
페이징과 정렬
- 파라미터로 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반응형'Spring > Spring Data JPA' 카테고리의 다른 글
Spring Data JPA - 도메인 클래스 컨버터 (0) 2022.03.21 Spring Data JPA - 엔티티의 생성, 변경한 사람과 시간을 추적(Auditing) (0) 2022.03.21 Spring Data JPA - 사용자 정의 리포지토리 구현 (0) 2022.03.21 Spring Data JPA - @EntityGraph (0) 2022.03.20 Spring Data JPA - 벌크성 수정 쿼리 (0) 2022.03.20