[스프링 데이터 JPA] Web확장된 페이징과 정렬 사용

sonnng·2023년 12월 7일
0

Spring

목록 보기
36/41
post-thumbnail

스프링 Data JPA에서 제공하는 페이징과 정렬은 검색 리스트를 조회하는데에도 사용할 수 있다.

@GetMapping("/members")
public Page<Member> list(Pageable pageable) {
    Page<Member> page = memberRepository.findAll(pageable);
return page; 
}

이렇게 API를 작성할때 Pageable을 파라미터로 받을 수 있다. 저번 포스트에서도 작성을 했었지만 Pageable은 인터페이스고 실제로는 PageRequest객체를 생성해서 파라미터에서 받을 수 있다.

요청 파라미터는 어떻게?

/members?page=0&size=3&sort=id,desc&sort=username,desc 가 되겠다.

  • page : 조회할 페이지 번호(0부터 시작)
  • size : 한 페이지에 노출할 데이터 건수
  • sort : 정렬조건을 정의하기 위함


페이지 사이즈, 정렬 기준을 설정하는 방법(글로벌 vs 개별)

  • 글로벌 설정 : application.properties 또는 application.yml에 작성
spring.data.web.pageable.default-page-size=20 /# 기본 페이지 사이즈/ 
spring.data.web.pageable.max-page-size=2000 /# 최대 페이지 사이즈/

  • 개별 설정 : @PageableDefault 사용(API 파라미터 앞에 사용)
@RequestMapping(value = "/members_page", method = RequestMethod.GET) 
public Page<Member> list(@PageableDefault(size = 12, sort = "username",
                     direction = Sort.Direction.DESC) Pageable pageable) {
    Page<Member> page = memberRepository.findAll(pageable);
    return page;
}

이렇게 Member에 대한 Page타입으로 반환되었다고 치자. 그렇다고 Page로 반환해도 될까?

답은 아니다.

DTO로 반환해야 한다. 다음의 한줄을 추가한다.


@GetMapping("/members")
public Page<MemberDto> list(Pageable pageable) {
    Page<Member> page = memberRepository.findAll(pageable); 
    Page<MemberDto> pageDto = page.map(MemberDto::new);
return pageDto; 
}

0개의 댓글