게시판에 페이지 기능을 추가하기 위해 페이징을 해보자.

스프링 데이터 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);
}

복잡한 내용보다는 예제를 통해 쉽게 알아보자.

게시판 예제

컨트롤러