分頁page Mybatis plus分頁原理

2021-10-16 09:37:22 字數 1597 閱讀 5051

本來準備寫spring的知識點,結果昨天面試問到了分頁原理,印象中是用***+count後通過sql拼接完成的,具體的內容不太記得了,臨時加塞看一波,記錄一下

引入依賴,不多逼逼

將分頁外掛程式注入

首先是sql的攔截方法

首先是在sql解析器中對sql進行解析和優化,然後其中這一步對分頁做了判斷

mybatis-plus的預設pagesize是500,隨後取出sql,建立資料庫連線

隨後

點進去可以發現

主要是針對count進行了優化,在page物件中可以發現 optimizecountsql這個bool預設是一直true的,所以一般預設的優化措施是在 jsqlparsercountoptimize 這個物件中,對sql優化完成後,進入到querytotal這個方法,開始了一次count,並將其賦值到page物件:

然後就是開始正常的處理操作了

首先是concatorderby對我們自定義的排序做操作,

然後通過方言工廠來判斷進入分頁的組裝,因為用的是mysql,所以直接看mysql的mysqldialect

這個就是把原生sql加了條數限制 limit(?,?),達到分頁的效果~

最後就是執行sql:

invocation.proceed()

稍微整理一下流程

1、通過page物件作為分頁依據

2、通過count來進行查詢總條數的限制

3、對原sql通過limit來進行分頁的效果

有點疑問的地方就是,在執行的時候有乙個setconsumerchain方法,不知道這個方法是幹啥用的。。。。

其實好像答的確實是這些內容。。。就是簡單了些

還是不太擅長應付面試呀~~太緊張了

這個jsq我看著總想著自己的名字縮寫,這**看著老出戲了

EasyUI分頁(前台分頁和後台分頁)

分頁包括前台分頁和後台分頁兩種,針對資料量比較小的,比如說單位,角色等,可以使用前台分頁,而針對日誌檔案這些,需要後台分頁。先說說前台分頁吧 function pagerfilter data var dg this var opts dg.datagrid options var pager dg...

dede channel 分頁 JS分頁

dede channel 無法分頁的,所以建議用js分頁,下面是 站長特效01頁,打造國內最帥的網頁特效站!站長特效01頁,打造國內最帥的網頁特效站!站長特效01頁,打造國內最帥的網頁特效站!站長特效01頁,打造國內最帥的網頁特效站!站長特效01頁,打造國內最帥的網頁特效站!站長特效01頁,打造國內...

物理分頁和記憶體分頁和邏輯分頁

物理分頁依賴的是某一物理實體,這個物理實體就是資料庫,比如mysql資料庫提供了limit關鍵字,程式設計師只需要編寫帶有limit關鍵字的sql語句,資料庫返回的就是分頁結果。邏輯分頁依賴的是程式設計師編寫的 資料庫返回的不是分頁結果,而是全部資料,然後再由 程式設計師通過 獲取分頁資料,常用的操...