簡體   English   中英

Spring 分頁和計數查詢

[英]Spring Pagination and count query

我正在開發一個 REST API 管理Module對象。 對於 UI,我需要分頁和總頁數。

我知道當 Spring 使用Page<T>時,會使用額外的計數查詢(以獲取總頁數),這是一項間接費用。

我需要 UI 的總頁數。 但只有一次(不需要為每個新頁面再次執行計數查詢)。

所以我在考慮公開兩個端點:

  • 獲取元素總數
  • 獲取數據(所以我返回一個List<Module>而不是Page<Module>因為我不想為每個頁面請求執行這個額外的計數查詢)

是這樣的:

@RestController

@RequestMapping("/api/modules")
public class ModuleApi {

    private final ModuleService service;

    @GetMapping("/count")
    public Long count() {
        return service.countModules();
    }


    @GetMapping
    public List<Module> find( 
                @RequestParam("name") String name ,
                @RequestParam(value = "page", required = false, defaultValue = "0") Integer page,
                @RequestParam(value = "size", required = false, defaultValue = "10") Integer size
    ) {
        return service.find(PageRequest.of(page, size));
    }
}

這是一個好的設計嗎?

計數一次意味着您的計數將隨着更多模塊插入您的數據庫而過時,在這種情況下計數不再相關。

更好的設計是使用 spring 的Slice<Module> ,完全忘記計數,並在前端實現解決方案。 想一想某些網站如何僅在您位於頁面底部時才能為您帶來更多結果。

然而,這可能會在您的架構上花費大量的精力和時間,因此您的建議應該沒問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM