本來準備寫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語句,資料庫返回的就是分頁結果。邏輯分頁依賴的是程式設計師編寫的 資料庫返回的不是分頁結果,而是全部資料,然後再由 程式設計師通過 獲取分頁資料,常用的操...