Pagination

bird.j·2021년 4월 22일
0

SpringBoot

목록 보기
16/22
post-custom-banner

📌 Pagination은 대량의 데이터를 나눠서 보내는 방법이다.
또한 어떠한 기준으로 데이터를 정렬하며 페이징해야할 때 이용할 수 있다.
Spring Data Jpa를 이용하여 구현할 수 있다.

Controller

@GetMapping("/api/products")
    public ReturnProduct getProducts(@RequestParam("page") int page, @RequestParam("size") int size, @RequestParam("sortBy") String sortBY,
                               @RequestParam("isAsc") boolean isAsc){ 
        page = page - 1; //DB는 0부터 인덱스가 시작하므로
        return productService.getProducts(page, size, sortBY, isAsc);
    }
  • page : 현재 페이지 번호
  • size : 페이지 사이즈
  • sortBy : 정렬 항목 (그 항목 기준으로 정렬)
  • isAsc : 오름차순? (true오름차순, false내림차순)



Service

public Page<Product> getProducts(int page, int size, String sortBy, boolean isAsc) {
     Sort.Direction direction = isAsc ? Sort.Direction.ASC : Sort.Direction.DESC;
     Sort sort = Sort.by(direction, sortBy);
     
     Pageable pageable = PageRequest.of(page, size, sort);

     Page<Product> productList = productRepository.findAll(pageable);
 }

💡 Pageable

📌 페이징 하는 방법을 기술해놓은 클래스(인터페이스)

  • page : 실제로 페이징으로 잘려진 객체들을 담고 있는 객체

💡 PageRequest

📌 Pageable 인터페이스를 구현한 객체.

  • PageRequest 객체를 repository 메소드에 인자로 전달한다.
  • 찾을 page와 한 페이지의 size를 필수 인자로 받는다.
  • 정렬을 할 경우에는 Sort를 생성자 인자로 추가해서 PageRequest를 생성한다.



Repository

public interface ProductRepository extends JpaRepository<Product, Long> {
    Page<Product> findAll(Pageable pageable); 
}
  • 페이징은 list 대신에 page쓴다

  • List<> findAllById(Long id, Pageable pageable) 이런 식으로 쓸 수도 있다.

post-custom-banner

0개의 댓글