兩個都用於分頁,常用的應該是pagehelper了,
使用方法是 pagehelper.startpage()然後後邊寫sql就可以。 緊接著的乙個sql起作用。
ipage則需要在dao層傳入ipage的實現類page物件,該物件實現了ipage。
區別:pagehelper內部原理是將傳入的頁碼和條數賦值給了page物件,儲存到了乙個本地執行緒threadloacl中,然後會進入mybatis的***中。
然後再***中獲取本地執行緒中儲存的分頁的引數。最後再將這寫分頁引數和原本的sql以及內部定義好的sql進行拼接完成sql的分頁處理。
中間會進行判斷該sql 的型別是查詢還是修改操作。如果是查詢才會進入分頁的邏輯並判斷封裝好的page物件是否是null,null則不分頁,否則分頁。
ipage內部原理也是基於***,但是這個攔截的是方法以及方法中的引數,這個也會判斷是否是查詢操作。如果是查詢操作,才會進入分頁的處理邏輯。
進入分頁邏輯處理後,***會通過反射獲取該方法的引數進行判斷是否存在ipage物件的實現類。如果不存在則不進行分頁,存在則將該引數賦值給ipage物件。
然後進行拼接sql的處理完成分頁操作。
但是使用ipage需要注入乙個bean***交給spring進行管理。如下。否則不會進行攔截。
@bean
public paginationinterceptor paginationinterceptor()
pom: springboot使用的是2.1.0
com.baomidou
mybatis-plus-boot-starter
$ com.baomidou
mybatis-plus-generator
ipage的好處:
適用於多方言的資料庫型別;例如 mysql、oracle、sqlserver等。
注意:如果兩個一起用對同乙個sql進行分頁,內部會先執行ipage的***並進行分頁 然後會進入的pagehelper的分頁處理。
優先使用的是ipage並且pagehelper會出現問題(不論誰前誰後)。返回page是沒問題的,但是如果返回集合的結果集使用pageinfo進行分頁就會出現問題。pagehelper只會有指定條數的資料。
所以只能使用乙個,如果兩個一起使用,則使用ipage返回page接收。不可以使用pageinfo進行分頁資料。(當然這個的前提也是對同乙個sql進行分頁操作並返回的集合結果集,正常來說也不會這麼幹,就隨便提一嘴)
Ipage 分頁踩坑 避雷
注!沒啥事的時候,總結出了一點點 相關的筆記,有需要的拿去 不需要的,路過就行 標籤集合 private list tagids 當我封裝好物件時 寫完sql時進行分頁查詢時測試時發現分頁的資料不準確,分頁總條數不準確 因為內巢狀陣列原因,mybatis會自動進行聚合,和在資料庫顯示的條數不一致,在...
Mybatis中的分頁外掛程式 pageHelper
如果直接是從資料庫中進行分頁處理,可以使用以下兩行 實現 pagehelper startpage currentpage,pagesize page page page getroleaccountinfobycondition roleaccountinfodto page.gettotal 獲...
物理分頁和記憶體分頁和邏輯分頁
物理分頁依賴的是某一物理實體,這個物理實體就是資料庫,比如mysql資料庫提供了limit關鍵字,程式設計師只需要編寫帶有limit關鍵字的sql語句,資料庫返回的就是分頁結果。邏輯分頁依賴的是程式設計師編寫的 資料庫返回的不是分頁結果,而是全部資料,然後再由 程式設計師通過 獲取分頁資料,常用的操...