📌 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) 이런 식으로 쓸 수도 있다.