JPA에서는 Pagination 을 위해 두가지 인터페이스를 제공한다.
위 두가지 인터페이스에 대해 설명한다.
Package org.springframework.data.domain
에 포함된 인터페이스로 PageRequest라는 구현체가 따로 존재 한다.
Pageable pageable = PageRequest.of(1,10);
1_page의 10개의 사이즈를 가진다는 뜻
또한 JPARepository에서 pagealbe 인자를 넘겨주는 메소드를 오버라이딩 하면 Page 또는 Slice 객체로 리턴 받을 수 있다.
public interface MyRepository extends JPARepository<My, Long>{
Page<My> findPageAll(Pageable pageable);
Slice<My> findSliceAll(Pageable pageable);
}
그렇다면 차이는?
Slice 객체의 메서드 들을 살펴보자
Slice객체를 이용하여 무한 페이지 구현시 이용하면 매우 편할 것 같다.
Page는 Slice 를 상속받는 객체이다.
따라서 위 Slice 객체의 모든 메서드를 사용 가능하며
추가로
전체 데이터에 대한 정보를 가지고 있다.
실제로 날라가는 쿼리문을 보면 Count쿼리를 날려 전체 데이터를 관리하는 것을 알 수있다.
select count(member0_.member_id) as col_0_0_ from member member0_ ```
https://velog.io/@dltkdgns3435/SpringBoot-Spring-Data-JPA-%EC%97%90%EC%84%9C-Page%EC%99%80-Slice
https://colour-my-memories-blue.tistory.com/10
https://wimoney.tistory.com/entry/SpringDataJPA-%ED%9A%A8%EC%9C%A8%EC%A0%81%EC%9D%B8-%ED%8E%98%EC%9D%B4%EC%A7%95%EC%9D%84-%EC%9C%84%ED%95%9C-Pageable-Slice-%EB%B6%84%EC%84%9D