쿼리메서드 부분
@Repository
public interface OrderRepository extends JpaRepository<Order, String> {
Page<Order> findAll(Pageable pageable);
}
Pageable 이용하기(PageRequest가 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());
}
- 위와 같이 PageRequest.of 메서드를 이용
size
: 각 페이지 별 몇개의 아이템이 들어갈 지page
: 위의 size로 적용 시, 결과로 나오는 페이지 중 몇 번째 페이지를 받을 지(index는 0부터 시작)
Page
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);
}
- map은 Page가 담고있는 content에 대해 해당 함수를 적용하여 content를 다시 만드는 것임(stream의 map과 같음)
TroubleShooting
- Page index 가 0부터 시작하는데, 1부터 값을 가지도록 하려면 ReflectionUtils 와 같은 방법을 사용해야 함.
PageImpl(pageResult.content, pageable, pageResult.totalElements)
- 위와 같이 그냥 pageable이 1부터 값 갖도록 해서 내려주면 total 갯수가 원래 갯수보다 page 1개 더 많게 계산되서 나옴