Spring JPA 에서는 Pageable을 활용해서 Pagination을 구현할 수 있다.
‘page=3&size=10&sort=id,DESC’ 형식의 쿼리 파라미터를 요청하면 된다.
예시 코드 1 )ProductController
// 로그인한 회원이 등록한 관심 상품 조회
@GetMapping("/api/products")
public Page<Product> getProducts(
@RequestParam("page") int page,
@RequestParam("size") int size,
@RequestParam("sortBy") String sortBy,
@RequestParam("isAsc") boolean isAsc,
@AuthenticationPrincipal UserDetailsImpl userDetails
) {
Long userId = userDetails.getUser().getId();
page = page - 1;
return productService.getProducts(userId, page, size, sortBy, isAsc);
}
예시 코드 2 ) ProductService
// 회원 ID 로 등록된 상품 조회
public Page<Product> getProducts(Long userId, 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);
return productRepository.findAllByUserId(userId, pageable);
}
예시 코드 3 ) ProductRepository
public interface ProductRepository extends JpaRepository<Product, Long> {
Page<Product> findAllByUserId(Long userId, Pageable pageable);
}