HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🤩
개발
/
Spring Data
Spring Data
/
🧣
JPA(Java Persistence API)
/
페이징 처리

페이징 처리

 

쿼리메서드 부분

Pageable 이용하기(PageRequest가 Pageable의 구현체)

  • 위와 같이 PageRequest.of 메서드를 이용
    • size : 각 페이지 별 몇개의 아이템이 들어갈 지
    • page : 위의 size로 적용 시, 결과로 나오는 페이지 중 몇 번째 페이지를 받을 지(index는 0부터 시작)
 

Page

Page interface document
  • map은 Page가 담고있는 content에 대해 해당 함수를 적용하여 content를 다시 만드는 것임(stream의 map과 같음)

TroubleShooting

  • Page index 가 0부터 시작하는데, 1부터 값을 가지도록 하려면 ReflectionUtils 와 같은 방법을 사용해야 함.
  • 위와 같이 그냥 pageable이 1부터 값 갖도록 해서 내려주면 total 갯수가 원래 갯수보다 page 1개 더 많게 계산되서 나옴
@Repository public interface OrderRepository extends JpaRepository<Order, String> { Page<Order> findAll(Pageable pageable); }
Page<Order> orders = orderRepository.findAll(PageRequest.of(0, 3)); orders.getContent().forEach(System.out::println); public static PageRequest of(int page, int size) { return of(page, size, Sort.unsorted()); }
public interface Page<T> extends Slice<T> { static <T> Page<T> empty() { return empty(Pageable.unpaged()); } static <T> Page<T> empty(Pageable pageable) { return new PageImpl(Collections.emptyList(), pageable, 0L); } int getTotalPages(); long getTotalElements(); <U> Page<U> map(Function<? super T, ? extends U> converter); }
PageImpl(pageResult.content, pageable, pageResult.totalElements)