https://thcoding.tistory.com/264
저번 페이징 처리에 이어서 웹에서 편리하게 사용할 수 있도록 spring data jpa가 제공해주는 페이징,정렬방법에 대해 알아보자.
1. 먼저 컨트롤러에 아래와같이 member를 100명 만들어주도록 하자.
@PostConstruct
public void init() {
for(int i = 0; i < 100; i++){
memberRepository.save(new Member("user" + i, i));
}
}
2. 그다음 컨트롤러에 list라는 메서드를 만들어주자.
@GetMapping("/members")
public Page<Member> list(Pageable pageable) {
Page<Member> page = memberRepository.findAll(pageable);
return page;
}
저번포스팅에서 썼던 Pageable 객체를 사용한다.
이렇게 했을때, members api로 요청을 보내면 어떻게 응답이 올까?
"content": [
{
"createdDate": "2024-08-27T22:55:15.832833",
"updatedDate": "2024-08-27T22:55:15.832833",
"id": 1,
"age": 0,
"username": "user0",
"team": null
},
{
"createdDate": "2024-08-27T22:55:15.846281",
"updatedDate": "2024-08-27T22:55:15.846281",
"id": 2,
"age": 1,
"username": "user1",
"team": null
},
{
"createdDate": "2024-08-27T22:55:15.847625",
"updatedDate": "2024-08-27T22:55:15.847625",
"id": 3,
"age": 2,
"username": "user2",
"team": null
},
...
이런식으로 데이터 10개가 페이징 되어서 응답을 보내주게 된다. 요청에서 파라미터로 size = 3 하면 한페이지에 데이터가 3개가 들어가게 된다. 다른 파라미터로 sort를 사용할 수 도 있다.
3. 기본값의 size는 10이지만 yml 파일에서 따로 설정해줄 수 도 있다.
data:
web:
pageable:
default-page-size: 10
max-page-size: 2000
기본 페이지 사이즈는 10, 최대 페이지사이즈는 2000이 된다.
4. 하지만 어노테이션을 붙혀서 기본페이지 사이즈를 정할 수도 있다.
@GetMapping("/members")
public Page<Member> list(@PageableDefault(size = 12, sort = "username")Pageable pageable) {
Page<Member> page = memberRepository.findAll(pageable);
return page;
}
@PageableDefault를 붙혀서 옵션을 넣어주면 이게 우선순위가 된다.
5. Page내용을 변환(DTO로)
@GetMapping("/members")
public Page<MemberDto> list(@PageableDefault(size = 5) Pageable pageable) {
return memberRepository.findAll(pageable).map(member -> new MemberDto(member.getId(),member.getUsername(),null));
}
이렇게 바꿔주면 응답 메시지바디에는 우리가 설정했던 MemberDto로 변환이되어 담겨온다.
'Java > ORM' 카테고리의 다른 글
JAVA ORM - Spring Data JPA(동적쿼리) (0) | 2024.08.29 |
---|---|
JAVA ORM - Spring Data JPA(사용자 정의 리포지토리, Auditing의 두가지 방법) (0) | 2024.08.25 |
JAVA ORM - Spring Data JPA(페이징, 슬라이스, countQuery) (0) | 2024.08.23 |
JAVA ORM - Spring Data JPA(JpaRepository의 주요 메서드, 쿼리 메서드) (0) | 2024.08.21 |
JAVA ORM - Spring Data JPA(JPA와의 차이점) (0) | 2024.08.20 |