SPRING

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

cocodingding 2023. 3. 9. 00:05

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)