[Spring Boot + JPA + MySQL] 페이징

max9106·2020년 3월 3일
2

페이징

게시글이 많아지면, 페이징으로 관리를 해줘야 할 때가 있다.

메인 페이지(list.html)를 살펴보면, pageList로 페이징 처리를 함을 볼 수 있다.

page 링크를 누르면, Get요청으로 page값을 넘겨줌을 볼 수 있다.

Controller

메인 페이지를 보여줄 때, 요청에서 page값을 받아 해당 페이지의 게시글만 보여줘야한다.

기존의 list controller에서 page값을 받아올 수 있게 추가해줘야한다.

@RequestParam으로 page값을 받아준다(기본값은 1이다)
해당 페이지에 해당하는 게시글들만 보여줘야 하기 때문에, getBoardList에도 페이지번호를 줘야한다.

pageList는 전체 페이지 목록이다. 게시글 수로 페이지 목록 수가 결정된다. Service에서 구현해줘야한다.

Service

getBoardList에 페이지 번호를 넘겨주었기 때문에, 전체 게시글이 아닌 기존 코드에서 받은 페이지 번호의 게시글만 보여지도록 고쳐야한다.

한 페이지에 4개의 게시글, 페이지 목록은 총 5 페이지까지로 설정해주었다.

repository에서 게시글을 가져오는 findAll에 Pageable 인터페이스 구현체(PageRequest.of)를 전달해주면 페이징을 할 수 있다.

PageRequest.of(limit값, 가져올 양, 정렬방식) 으로 사용할 수 있다.(limit는 실제 페이지 번호와 SQL의 limit가 다르기 때문에 '현재 페이지 - 1'값을 준다.)

Page 객체의 getContent를 사용하면, 리스트를 꺼낼 수 있다.

getPageList는 총 게시글 갯수이다.

getBoardCount로 repository에서 총 데이터(게시글)의 수를 받아오고, 총 게시글을 한 페이지 당 보여지게 할 게시글 수로 나눠준다.(소수점이 있을 경우 올림한다. 왜냐하면 만약 총 게시글 수가 5개이고, 한 페이지 당 보여지게 할 게시글 수가 4개인 경우, 5/4 = 1.25 이다. 즉 올림을 하면 2이다. 총 게시글이 5개면 총 2 페이지가 필요하다. 따라서 올림을 해준다.)

현재 페이지를 기준으로 마지막 페이지 번호 계산하고, 페이지 리스트를 리턴한다.

실행 결과

페이지 별로 게시글이 잘 나타남을 볼 수 있다.



reference: https://victorydntmd.tistory.com/333

profile
@woowacourse 3rd BE

3개의 댓글

comment-user-thumbnail
2020년 4월 19일

많은 도움 받았습니다. 감사합니다.

답글 달기
comment-user-thumbnail
2020년 10월 2일

감사합니다!!!!!

답글 달기
comment-user-thumbnail
2021년 5월 25일

멋져요

답글 달기