Hello

게시글 페이징_페이징 객체

by 볼빵빵오춘기

Board2Service

  • page 값을 가져올 때 -1은 사용자에게 1페이지라 보여줬지만 page는 0부터 시작이기 때문이다.
    여기서 properties 는 DB기준이 아니라 Entity기준이다.
  • 참고로 Page객체에 담아가긴 하지만 List객체로 가져갈 수도 있다.
    하지만 그렇게 사용하지 않는 이유는 밑에 Page객체 메소드를 사용할 수 없으므로 Page객체로 가져간다.
  • Entity로 담겨진 Page객체에 담겨진 객체를 DTO객체로 가져가야한다.
  • map은 Page객체에서 제공해주는 메소드인데 foreach처럼 반복문처럼 돌려준다.
더보기
boardEntities.map(board -> new Board2DTO(board.getId(), board.getBoardWriter(), board.getBoardTitle(), board.getBoardHits(), board.getCreatedTime()));

map 메소드 안에 board는 Entity객체이다.

말하자면 Board2Entity가 담겨진 Page객체의 Board2Entity갯수만큼 foreach할 껀데 foreach할 때 그 순서의 Board2Entity를 board라 부르겠다 라는 의미이다.

  • 담겨야하는 정보는 id, writer, title, hits, createdTime 이므로 이것만 담긴 DTO 생성자가 없으므로 DTO에 가서 위의 정보만 담는 생성자를 추가한 후 매개변수 순서에 맞게 넣어줘서 사용하면 된다.

※ Page 객체로 확인 할 수 있는 메서드(몇 개만 확인)

더보기
public Page<Board2DTO> paging(Pageable pageable) {
    int page = pageable.getPageNumber() - 1;
    int pageLimit = 3; // 한 페이지에 보여줄 글 갯수
    // 한페이지당 3개씩 글을 보여주고 정렬 기준은 id 기준으로 내림차순 정렬
    // page 위치에 있는 값은 0부터 시작
    Page<Board2Entity> boardEntities =
            board2Repository.findAll(PageRequest.of(page, pageLimit, Sort.by(Sort.Direction.DESC, "id")));

    System.out.println("boardEntities.getContent() = " + boardEntities.getContent()); // 요청 페이지에 해당하는 글
    System.out.println("boardEntities.getTotalElements() = " + boardEntities.getTotalElements()); // 전체 글갯수
    System.out.println("boardEntities.getNumber() = " + boardEntities.getNumber()); // DB로 요청한 페이지 번호
    System.out.println("boardEntities.getTotalPages() = " + boardEntities.getTotalPages()); // 전체 페이지 갯수
    System.out.println("boardEntities.getSize() = " + boardEntities.getSize()); // 한 페이지에 보여지는 글 갯수
    System.out.println("boardEntities.hasPrevious() = " + boardEntities.hasPrevious()); // 이전 페이지 존재 여부
    System.out.println("boardEntities.isFirst() = " + boardEntities.isFirst()); // 첫 페이지 여부
    System.out.println("boardEntities.isLast() = " + boardEntities.isLast()); // 마지막 페이지 여부

    // 목록: id, writer, title, hits, createdTime
    Page<Board2DTO> boardDTOS = boardEntities.map(board -> new Board2DTO(board.getId(), board.getBoardWriter(), board.getBoardTitle(), board.getBoardHits(), board.getCreatedTime()));
    return boardDTOS;
}
public Page<Board2DTO> paging(Pageable pageable) {
    int page = pageable.getPageNumber() - 1;
    int pageLimit = 3; // 한 페이지에 보여줄 글 갯수
    // 한페이지당 3개씩 글을 보여주고 정렬 기준은 id 기준으로 내림차순 정렬
    // page 위치에 있는 값은 0부터 시작
    Page<Board2Entity> boardEntities =
            board2Repository.findAll(PageRequest.of(page, pageLimit, Sort.by(Sort.Direction.DESC, "id")));

		// 목록: id, writer, title, hits, createdTime
        Page<Board2DTO> boardDTOS = boardEntities.map(board -> new Board2DTO(board.getId(), board.getBoardWriter(), board.getBoardTitle(), board.getBoardHits(), board.getCreatedTime()));
        return boardDTOS;

}

 

Board2DTO

public Board2DTO(Long id, String boardWriter, String boardTitle, int boardHits, LocalDateTime boardCreatedTime) {
    this.id = id;
    this.boardWriter = boardWriter;
    this.boardTitle = boardTitle;
    this.boardHits = boardHits;
    this.boardCreatedTime = boardCreatedTime;
}

 

Board2Controller

더보기

blockLimit 설명하자면 현재 DB에 7개 컬럼이 있다.

그리고 위에 Service에서 한 페이지당 3개씩 보여주기로 했다.

⇒ DB 7개 컬럼, 한 페이지당 3개씩 보여주기로 했으나 위의 이미지에서 보여줘야할 숫자는 1,2,3이나 blockLimit로 2개로 정해놓아서 2개씩 짤라서 보여준다.

@GetMapping("/paging")
public String paging(@PageableDefault(page=1) Pageable pageable,Model model){
    Page<Board2DTO> boardList = board2Service.paging(pageable);

    int blockLimit = 2; // 페잊 번호 갯수
    int startPage = (((int)(Math.ceil((double)pageable.getPageNumber() / blockLimit))) - 1) * blockLimit + 1; // 1 4 7 10 ~~
    int endPage = ((startPage + blockLimit - 1) < boardList.getTotalPages()) ? startPage + blockLimit - 1 : boardList.getTotalPages();

    // page 갯수 20개
    // 현재 사용자가 3페이지
    // 1 2 3
    // 현재 사용자가 7페이지
    // 7 8 9
    // 보여지는 페이지 갯수 3개
    // 총 페이지 갯수 8개

    model.addAttribute("boardList", boardList);
    model.addAttribute("startPage", startPage);
    model.addAttribute("endPage", endPage);
    return "board2paging";
}

'강의 따라하기 > member2' 카테고리의 다른 글

파일첨부_파일첨부 기능 소개  (0) 2023.12.29
게시글 페이징_페이징 화면 처리  (0) 2023.12.29
게시글 페이징_페이징 요청  (0) 2023.12.29
게시글 삭제  (0) 2023.12.29
게시글 수정  (1) 2023.12.29

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기