SpringBoot Paging 처리 방법

SpringBoot에서는 JPA를 통해 페이징 처리를 쉽게 활용할 수 있습니다.

예제 소스는 TodoList-backend 소스를 사용하였습니다.


Page 정보를 가지고 있는 Pageable 객체

controller단에서 파라미터로 받는 정보들
: @RequestParam : pageNo(0부터 시작), pageSize, sortBy

Pageable pageable = PageRequest.of(pageNo, pageSize, Sort.by(sortBy).descending);	

Page<TodoEntity> todoPage = todoRepository.findAll(pageable);

처리 로직 정리(entity -> Dto)

findAll(pagable); => Page<Entity> -> getContent(); ->List<Entity> 
-> mapping(stream) -> List<Dto>

✅ Response DTO를 만들어줘야 하는 이유!(Page정보 외에도 많이 있음)

Page<Entity>content 를 따로 List<PostResponse> 로 처리하는 것을 잊으면 안됩니다!

front단에 보내주는 Dto 필드에 Paging 내용을 넣어줄 것!
totalElements
totalPages
last boolean


구현 소스

PageResponse

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class PageResponse {

    private List<TodoResponse> content;
    private int pageNo;
    private int pageSize;
    private long totalElements;
    private int totalPages;
    private boolean last;

}

TodoController

    // Paging test
    @GetMapping
    public PageResponse readAllPaging(
            @RequestParam(value = "pageNo", defaultValue = "0", required = false) int pageNo,
            @RequestParam(value = "pageSize", defaultValue = "3", required = false) int pageSize,
            @RequestParam(value = "sortBy", defaultValue = "id", required = false) String sortBy
    ) {
        log.info("Read Paging All");
        return todoService.searchAllPaging(pageNo, pageSize, sortBy);
    }

TodoService

    @Override
    public PageResponse searchAllPaging(int pageNo, int pageSize, String sortBy) {

        // create Pageable instance
        Pageable pageable = PageRequest.of(pageNo, pageSize, Sort.by(sortBy).descending());
        Page<TodoEntity> todoPage = todoRepository.findAll(pageable);

        // get content for page object
        List<TodoEntity> listTodos = todoPage.getContent();

        List<TodoResponse> content = listTodos.stream().map(TodoEntity -> mapToDto(TodoEntity)).collect(Collectors.toList());

        return PageResponse.builder()
                .content(content)
                .pageNo(pageNo)
                .pageSize(pageSize)
                .totalElements(todoPage.getTotalElements())
                .totalPages(todoPage.getTotalPages())
                .last(todoPage.isLast())
                .build();

    }

postman 결과 값



참고

예제소스 : https://github.com/mooh2jj/todolist_backend.git

좋은 웹페이지 즐겨찾기