我們知道,在查詢數(shù)據(jù)庫時向臀,如果數(shù)據(jù)庫表中的數(shù)據(jù)比較多巢墅,都會使用到分頁技術(shù)。Mybatis也支持分頁查詢券膀,可以借助RowBounds對象君纫,對數(shù)據(jù)分頁,但是芹彬,基于RowBounds的分頁是對ResultSet結(jié)果集進行分頁蓄髓,也就是邏輯分頁,并不是物理分頁舒帮。換句話說会喝,也就是先把數(shù)據(jù)庫中的數(shù)據(jù)全部查詢出來,然后在進行過濾会前。今天小博老師先給大家介紹下RowBounds對象的 使用好乐,下節(jié)課我們再探討如何實現(xiàn)物理分頁。
先來了解下RowBounds類的源碼:
這個類很簡單瓦宜,只有offset和limit兩個參數(shù),表示從第幾條開始岭妖,取多少條临庇。
接下來看看Mybatis默認(rèn)分頁實現(xiàn)方法org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForSimpleResultMap()的源碼:
對查詢出的結(jié)果進行skipRows處理,skipRows代碼如下:
skipRows只是根據(jù)rowBounds對象的offset參數(shù)昵慌,跳過或者滾動到具體的起始行假夺。
再來看看shouldProcessMoreRows:
這里判斷讀取的結(jié)果集數(shù)量是否與rowBounds對象的limit參數(shù)相符,如果以獲取到相應(yīng)數(shù)量的結(jié)果斋攀,則不再繼續(xù)執(zhí)行已卷。
由此可以看出,Mybatis默認(rèn)的RowBounds分頁是對ResultSet的分頁淳蔼,執(zhí)行效率不會很理想侧蘸。如果要實現(xiàn)高效率的分頁,可以通過攔截器的方式實現(xiàn)鹉梨。下節(jié)課我們實現(xiàn)一個簡單的分頁攔截器讳癌。