게시판에 페이지 기능을 추가하기 위해 페이징을 해보자.
스프링 데이터 JPA를 사용하면 스프링 MVC에서 페이징과 정렬기능을 편리하게 사용할 수 있다.
build.gradle
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
스프링 데이터 JPA 의존성을 추가하면 파라미터로 Pageable 을 사용할 수 있다.
<aside>
💡 Pageable 은 인터페이스고 실제 사용되는 구현 객체는 PageRequest 이다.
</aside>
@GetMapping
public String list(Pageable pageable) {
Page<Board> boardPage = boardRepository.findAll(pageable);
}
repository.findXXX() 메서드에 파라미터로 Pageable 을 넘겨주면 Page<T> 인터페이스를 받을 수 있다.
Repository 인터페이스의 구현 객체인 SimpleJpaRepository 에서 Page<T> 의 구현 객체로 PageImpl<T> 에 페이징 결과를 담아 리턴하도록 구현되어 있다.
SimpleJpaRepository
public Page<T> findAll(Pageable pageable) {
if (isUnpaged(pageable)) {
return new PageImpl<T>(findAll());
}
return findAll((Specification<T>) null, pageable);
}
복잡한 내용보다는 예제를 통해 쉽게 알아보자.
Pageable 사용@PageableDefault 어노테이션 사용 시 페이징 옵션 설정 가능
page : 현재 페이지 번호 (default 0)
size : 한 페이지에 노출할 데이터 건수 (default 10)sort : 정렬 대상 (String[] 자료형, default {})direction : 정렬 순서 (default Sort.Direction.ASC)