Spring Data JPA를 이용한 Pagination

yeon·2021년 3월 30일

Spring Data JPA를 이용해서 paging 하기

게시판 미션 질문 게시글을 페이징해서 보여주기, 간단히 첫번째 페이지만 보여주는 방법을 정리해보았다.


step1.

Page을 리턴하고 Pageable을 매개변수로 받는 findAll 메소드가 PagingAndSortingRepository 인터페이스에 있다. 이 인터페이스를 JpaRepository인터페이스가 상속받고있다. 현재 나의 QuestionRepository 클래스는 JpaRepository를 상속받고 있다.

// class QuestionRepository extends JpaRepository
Page<Question> findAll(Pageable pageable);

step2.

QuestionService에서 Pageable인터페이스의 구현체인 PageRequest객체를 생성하고, 이를 repository의 findAll 인자로 넘긴다.

PageRequest의 객체는 페이지 번호와 페이지의 크기(한페이지에 보여질 데이터의 수)를 값으로 주고 생성한다.

of라는 정적 팩토리메소드를 사용해서 PageRequest 객체를 생성할 수 있다.

페이지 번호는 0부터 시작한다.

// QuestionService 
public Page<Question> getQuestionList(){
	Pageable firstPageWithTwoElements = PageRequest.of(0, 5);
	return questionRepository.findAll(firstPageWithTwoElements);
}

위의 코드는 한 페이지에 5개의 항목이 보이고(size) 첫번째 페이지를 반환하는 메소드이다.


step3.

이제 QuestionController에서 해당 페이지가 출력하도록 한다.

// QuestionController
@GetMapping("/")
public String list(Model model) {
	Page<Question> firstPage = questionService.getQuestionList();
	List<Question> pageContents = firstPage.getContent();
	model.addAttribute("questions", pageContents);
	return "index";
}

getContent 메소드는 페이지에 들어있는 데이터들을 List로 반환한다.

이 List를 가지고 model을 이용하여 뷰로 데이터를 넘겨준다.



학습 자료 : https://www.youtube.com/watch?v=NQh6jbxNKpQ

https://www.baeldung.com/spring-data-jpa-pagination-sorting

3개의 댓글

comment-user-thumbnail
2021년 3월 31일

시간남으시면 데이터베이스에서 OFFSET LIMIT 키워드로 페이징 하는걸 공부해보셔도 좋을듯 합니다~!
나중에 JPA 안쓰면 아마 저런 방식으로 해야될거에요!
항상 TIL 남기는거 대단하시네요..

1개의 답글
comment-user-thumbnail
2021년 6월 30일

구글에서 검색하다 유입되서 인사박고갑니다 연선생님

답글 달기