230718 Slice

보트·2023년 7월 18일
0

Spring

목록 보기
19/27

Spring Data JPA 페이징

Pageable

Pageable pageable = PageRequest.of(page, size, sort);
  • Pageable : 손쉽게 페이징, 정렬 처리를 하기위해 제공되는 인터페이스
  • PageRequest : 인터페이스의 구현체(정적 팩토리 메소드 'of'통해 구현)
  • 파라미터로 현재 페이지, 데이터 노출 개수, 정렬방법(ASC, DESC)
@GetMapping("/products")
public Page<ProductResponseDto> getProducts(
        @RequestParam("page") int page,
        @RequestParam("size") int size,
        @RequestParam("sortBy") String sortBy,
        @RequestParam("isAsc") boolean isAsc,
        @AuthenticationPrincipal UserDetailsImpl userDetails) {

}

Slice

  • Page는 부모 인터페이스인 Slice를 상속
    (Slice + getTotalPages(), getTotalElements())

현재 페이지를 @RequestParam으로 넘겨줌

PostController.java

    @GetMapping("/slice")
    public Slice<PostResponseDto> getPostSlice(@RequestParam("page") int page) {
        return postService.getPostSlice(page);
    }

PostServiceImpl.java

    @Override
    public Slice<PostResponseDto> getPostSlice(int page) {
        Sort sort = Sort.by(Sort.Direction.DESC, "modifiedAt");
        Pageable pageable = PageRequest.of(page, PAGE_SIZE, sort);

        Slice<Post> postSlice = postRepository.findAllBy(pageable);
        Slice<PostResponseDto> postResponseDtoSlice = postSlice.map(PostResponseDto::new);

        return postResponseDtoSlice;
    }

PostRepository.java

    Slice<Post> findAllBy(Pageable pageable);

(참고 : https://zayson.tistory.com/entry/Spring-Data-JPA%EC%9D%98-Page%EC%99%80-Slice
https://devjem.tistory.com/74
https://velog.io/@dltkdgns3435/SpringBoot-Spring-Data-JPA-%EC%97%90%EC%84%9C-Page%EC%99%80-Slice)

profile
일주일에 한 번

1개의 댓글

comment-user-thumbnail
2023년 7월 18일

덕분에 좋은 정보 얻어갑니다, 감사합니다.

답글 달기