Spring Data JPA를 이용한 Pagination

yeon·2021년 3월 30일
2

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일

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

답글 달기