[spring 토이프로젝트] 게시판 crud, 검색, 페이징 구현- 6. 페이징

이건회·2022년 7월 29일
0

spring게시판1

목록 보기
6/6

레퍼런스 : https://velog.io/@max9106/Spring-Boot-JPA-MySQL-%ED%8E%98%EC%9D%B4%EC%A7%95

프로젝트 전체 소스코드 : https://github.com/rawfishthelgh/boardcrud.git

  • list.html에서 pageList에서 pageNum을 하나씩 꺼내와 페이징 처리를 하고 있다.
  • page 링크를 누르면 get요청으로 pageNum을 넘겨준다.

  • 메인 페이지를 보여줄 때 기존 컨트롤러 중 List 에서 @RequestParam을 통해 요청에서 page 값을 받아 해당 페이지의 게시글만 볼 수 있게끔 보여준다.
  • page 값의 기본값은 1이므로 page값을 받지 않고 처음 mainpage에 들어갈 땐 자동적으로 1페이지 값이 들어온다.
  • 해당 페이지에 해당하는 게시글들만 보여줘야 하기 때문에, 기존에 구현된 Service의 getBoardList에도 페이지번호를 줘야한다.
  • pageList는 Service에 구현할 것이며, 전체 페이지 목록을 보여준다. 게시글 수가 몇이냐에 따라 목록 수가 결정된다.


  • 한 페이지에 게시글이 총 4개까지 보여지게, 한 페이지에 총 5페이지까지 페이지 목록이 설정되도록 명시한다.
  • getBoardList에서 넘겨준 페이지 번호를 통해, 받은 페이지 번호의 게시글만 보여지도록 해야한다.
    repository에서 게시글을 가져오는 findAll에 Pageable 인터페이스 구현체(PageRequest.of)를 전달해주면 페이징을 할 수 있다.
  • PageRequest.of(limit값, 가져올 양, 정렬방식) 으로 사용할 수 있다.(limit는 실제 페이지 번호와 SQL의 limit가 다르기 때문에 '현재 페이지 - 1'값을 준다.)
  • 따라서 게시글 4개씩 생성일 순으로 가져오는 것이다.
  • Page 객체에 미리 구현된 getContent를 사용하면, 리스트를 꺼낼 수 있다.
  • Page 객체를 활용해 반환하면 다양한 pagination 관련 메소드를 사용할 수 있다.(참고 : https://velog.io/@albaneo0724/Spring-Pagination%EA%B3%BC-Page-%EA%B7%B8%EB%A6%AC%EA%B3%A0-Pageable)

  • 총 게시글 갯수를 나타내는 getPageList를 구현하자
  • getBoardCount를 통해 repository의 모든 객체의 수를 받아온다.
  • 총 게시글을 한 페이지 당 보여지게 할 게시글 수로 나누고 소수 점이 있을 때 올림하면 게시글에서 총 필요한 페이지 수를 알 수 있다.(즉 게시글 수가 5고 페이지당 보여줄 게시글 수가 4면 5/4=1.25 -> 올림하면 2 이므로 총 2페이지가 필요하다.)
  • 현재 페이지를 기준으로 블럭의 마지막 페이지를 계산한다. 즉 현재 페이지가 1이고, 총 페이지 수가 7인데 페이지가 한 페이지에 5개씩 보여준다면, 1+5인 6이 7보다 작으므로 마지막 페이지는 6이 되고, 현재 페이지가 3이라면 3+5인 8이 7보다 크므로 마지막 페이지는 7이 된다.
  • 만약 현재 페이지 넘버가 3보다 작거나 같으면 시작 페이지는 1, 그렇지 않으면 현재 페이지보다 2 작은 수가 시작 페이지가 되도록 한다.
  • 현재 페이지를 기준으로 블럭의 마지막 페이지까지 for문을 돌려 현재 페이지부터 마지막 페이지까지 1씩 늘린 값으로 pageList에 넣은 후 리턴한다.


  • 페이징이 잘 구현되었다.
profile
하마드

0개의 댓글