본문 바로가기

SPRING

메인프로젝트에 적용해본 Pageble

PageDto의전체 코드

@Getter
@NoArgsConstructor
public class PageDto<T> {
    private List<T> data;
    private PageInfo pageInfo;

    public PageDto(List<T> data, Page page) {
        this.data = data;
        this.pageInfo = new PageInfo(page.getNumber()+1, page.getSize(), page.getTotalPages(), page.getTotalElements());
    }

    @Getter
    private class PageInfo{
        private int pageNumber;
        private int size;
        private int totalPages;
        private long totalElements;

        public PageInfo(int pageNumber, int size, int totalPages, long totalElements) {
            this.pageNumber = pageNumber;
            this.size = size;
            this.totalPages = totalPages;
            this.totalElements = totalElements;
        }
    }
}

부분적으로 어떤 기능을 하는지 알아보자

 

@Getter
@NoArgsConstructor
public class PageDto<T> {
    private List<T> data;
    private PageInfo pageInfo;

    public PageDto(List<T> data, Page page) {
        this.data = data;
        this.pageInfo = new PageInfo(page.getNumber()+1, page.getSize(), page.getTotalPages(), page.getTotalElements());
    }
  • data: 페이징 처리된 데이터를 담는 리스트(List)이다. 제네릭 타입으로 T를 사용하여 어떤 타입의 데이터도 담을 수 있기 때문에 Trade를 담을 수도 Commission을 담을 수 있다.
  • pageInfo: 페이징 정보를 담는 PageInfo 객체.
  • PageDto(List<T> data, Page page): 데이터 리스트와 Page 객체를 받아서 data와 pageInfo를 초기화. Page 객체는 Spring Framework에서 제공하는 페이징 처리를 위한 클래스다.
@Getter
private class PageInfo{
    private int pageNumber;
    private int size;
    private int totalPages;
    private long totalElements;

    public PageInfo(int pageNumber, int size, int totalPages, long totalElements) {
        this.pageNumber = pageNumber;
        this.size = size;
        this.totalPages = totalPages;
        this.totalElements = totalElements;
    }
}
  • pageNumber: 현재 페이지 번호를 나타내는 필드.
  • size: 한 페이지에 보여줄 데이터의 수를 나타내는 필드.
  • totalPages: 전체 페이지 수를 나타내는 필드.
  • totalElements: 전체 데이터의 수를 나타내는 필드.
  • PageInfo(int pageNumber, int size, int totalPages, long totalElements): 페이지 정보를 초기화하는 생성자.

PageDto를 사용한 전체 조회

@GetMapping
public ResponseEntity readAllTrade(Pageable pageable) {
    Page<Trade> tradePage = tradeService.readTrades(pageable);
    List<Trade> tradeList = tradePage.getContent();
    return new ResponseEntity<>(new PageDto<>(tradeMapper.tradesToResponseDto(tradeList), tradePage), HttpStatus.OK);
}

 

 

포스트맨으로 잘 적용되는지 확인해보자

잘 적용되는 모습이다.

Param을 살펴보면,

  • page : 보고싶은 페이지의 번호
  • size: 한 페이지에 보여줄 데이터의 수.
  • sort: 기준을 삼을 인자와, 정렬방식(asc, desc)

'SPRING' 카테고리의 다른 글

Spring과Spring Boot의 간략한 차이점 - (spring - 2)  (0) 2023.12.22
서버란 무엇일까? - (Spring - 1)  (0) 2023.12.22
유효성 검사 어노테이션 모음  (0) 2022.12.16
정규 표현식 모음  (0) 2022.12.16
필드  (0) 2022.11.06