SpringBoot Paging処理方法


SpringBootでは、JPAで簡単にページングできます.
サンプルソースは、TodoList-backendソースを使用します.

Page情報を持つPageableオブジェクト


コントローラ側パラメータから受信した情報.
: @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>
DTOに応答する理由を作成!(ページ情報以外にもたくさんあります)Page<Entity>contentList<PostResponse>に別処理することを忘れないでください!
フロントエンドに送信された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