Spring Data JPA - Paging Request Paramater

목차

참고

https://docs.spring.io/spring-data/jpa/docs/1.7.0.DATAJPA-580-SNAPSHOT/reference/html/auditing.html

Paging Request Paramater

PageSize 를 사용해 Paging 과 관련한 Request Parameter 요청을 보낼 수 있다.

  • Page
    • Paging 된 데이터의 Page 번호
  • Size
    • Paging 할 데이터 크기
    • Default Size = 20 이다.
@GetMapping("/members")
public Page<Member> list(Pageable pageable) {
Page<Member> page = memberRepository.findAll(pageable);
return page;
}

Paramater 를 이용해 요청 보내기

# 0번 페이지에 해당하는 데이터들을 모두 가져온다.
http://localhost:8080/members?page=0
# 1번 페이지에 해당하는 데이터들을 모두 가져온다.
http://localhost:8080/members?page=1
# 전체 데이터를 size에 맞춰서 Paging하고 0번 페이지에 해당하는 데이터를 가져온다.
http://localhost:8080/members?page=0&size=3

Default Paging 설정 변경하기

Global(전역적) 으로 Paging 설정

propertiy를 이용해 Paging Size와 최대 Page의 개수를 설정할 수 있다.

  • spring.data.web.pageable.default-page-size : Paging Size 의 크기를 설정한다.
  • spring.data.web.pageable.max-age-size : Paging 의 최대 개수를 설정한다.
spring:
data:
web:
pageable:
default-page-size: 10
max-page-size: 2000

지역적으로 Paging 설정

PageableDefault 어노테이션을 이용해 기본적인 Page, Size, Sort 를 설정할 수 있다.

@GetMapping("/members")
public Page<Member> list(@PageableDefault(size = 5, sort = "username") Pageable pageable) {
Pageable requestPaging = pageable;
Page<Member> page = memberRepository.findAll(pageable);
return page;
}

Paging 내용을 DTO로 변환

Method Reference로 변형하기

@Data
public class MemberDto {
private Long id;
private String username;
private String teamName;

public MemberDto(Long id, String username, String teamName){
this.id = id;
this.username = username;
this.teamName = teamName;
}

// Entity를 이용해 Dto 객체를 생성
public MemberDto(Member member) {
this.id = member.getId();
this.username = member.getUsername();
}
}
@GetMapping("/members")
public Page<MemberDto> list(@PageableDefault(size = 5, sort = "username") Pageable pageable) {
Page<Member> page = memberRepository.findAll(pageable);

// Paging 결과를 DTO class로 변환해 반환한다.
Page<MemberDto> map = page
.map(member -> new MemberDto(member.getId(), member.getUsername(), null));
return map;
}
@GetMapping("/members")
public Page<MemberDto> list(@PageableDefault(size = 5, sort = "username") Pageable pageable) {
// Paging 결과를 DTO class로 변환해 반환한다.
Page<MemberDto> map = memberRepository.findAll(pageable)
.map(MemberDto::new);
return map;
}
Share