mybatisplus分頁機制


在做項目中遇到一個問題。分頁功能如果想人工設置一頁展示數量應該設置什么參數。

需求和場景是一頁數據很多,但是就是要一頁把所有數據都展示出來。WTF?

還有導出和列表想用同一個request對象也會遇到這個問題。

開始的時候,是設置 maxLimit 這個參數,然后 searchCount設置成false(不查詢count條數),但是只設置這個參數,對於要一頁展示所有數據這個場景不管用,不管maxLimit 設置多大,還是只查詢10條。為啥???

只能去看mybatis源碼了--------

在項目自己實現的分頁組件中發現了這么一個地方,原來是它這里設置成默認一頁10條記錄

而 BasePage繼承了 mybatisplus的 IPage ,然后會在后續處理。

在打印sql的時候發現 ,對於分頁請求mybatisplus 會默認給sql 語句加上 limit,即使什么參數不傳用這個分頁也會加上。這個玩意是什么時候加上的呢??

而我們知道 mysql和postgresql的分頁就是用limit實現的。而mybatisplus分頁是通過攔截器對sql語句進行預處理,把limit 和參數拼在原始sql后面,然后再將處理過sql語句交給mybatis。

通過一番尋找,具體的調用鏈是這樣的,(懶得畫時序圖了):

 com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor#intercept 
  ->com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor#beforeQuery
  ->com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor#beforeQuery
  //設置size ,並且把這個參數設置成 mybatis_plus_first 放到緩存中,后續設值的時候用
  ->com.baomidou.mybatisplus.extension.plugins.pagination.dialects.PostgreDialect#buildPaginationSql

首先分頁方法通過mybatis plugin 代理找到分頁的攔截器

在 這個方法中 ,處理maxLimit。如果 size 大於 maxLimit,maxLimit才生效。否則還是以size作為一頁展示條數限制

最后是在這個類中將limit拼在sql語句上的

使用這個分頁攔截器,需要在springboot啟動時注入進容器

而分頁組件就是這個設置為size的

最后結論:如果想要一頁顯示很多條數據,就設置IPage的size 參數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM