1. 程式人生 > >博為峰JavaEE技術文章 ——MyBatis RowBounds分頁

博為峰JavaEE技術文章 ——MyBatis RowBounds分頁

 

我們知道,在查詢資料庫時,如果資料庫表中的資料比較多,都會使用到分頁技術。Mybatis也支援分頁查詢,可以藉助RowBounds物件,對資料分頁,但是,基於RowBounds的分頁是對ResultSet結果集進行分頁,也就是邏輯分頁,並不是物理分頁。換句話說,也就是先把資料庫中的資料全部查詢出來,然後在進行過濾。今天小博老師先給大家介紹下RowBounds物件的 使用,下節課我們再探討如何實現物理分頁。

先來了解下RowBounds類的原始碼:

 

這個類很簡單,只有offset和limit兩個引數,表示從第幾條開始,取多少條。

接下來看看Mybatis預設分頁實現方法org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForSimpleResultMap()的原始碼:

 

對查詢出的結果進行skipRows處理,skipRows程式碼如下:


skipRows只是根據rowBounds物件的offset引數,跳過或者滾動到具體的起始行。

再來看看shouldProcessMoreRows:


由此可以看出,Mybatis預設的RowBounds分頁是對ResultSet的分頁,執行效率不會很理想。如果要實現高效率的分頁,可以通過攔截器的方式實現。下節課我們實現一個簡單的分頁攔截器。這裡判斷讀取的結果集數量是否與rowBounds物件 limit引數相符,如果以獲取到相應數量的結果,則不再繼續執行。