1. 程式人生 > >PageHelper很好很強大,轉載

PageHelper很好很強大,轉載

1.引入分頁外掛

1.引入Jar包

如果你想使用本專案的jar包而不是直接引入類,你可以在這裡下載各個版本的jar包(點選Download下的jar即可下載)

由於使用了sql解析工具,你還需要下載jsqlparser.jar(這個檔案完全獨立,不依賴其他):

2. 在Mybatis配置xml中配置攔截器外掛:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 <!-- 這個地方要注意,放到你mybatis的配置檔案xml裡的時候,這個外掛所對應的位置。
plugins ----在配置檔案中的位置必須符合要求,否則會報錯,順序如下:---- properties?, settings?,  typeAliases?, typeHandlers?,  objectFactory?,objectWrapperFactory?,  plugins?, -----應該放在此處----- environments?, databaseIdProvider?, mappers? --> <plugins> <!-- com.github.pagehelper為PageHelper類所在包名 --> <
plugin interceptor="com.github.pagehelper.PageHelper"> <property name="dialect" value="mysql"/> <!-- 該引數預設為false --> <!-- 設定為true時,會將RowBounds第一個引數offset當成pageNum頁碼使用 --> <!-- 和startPage中的pageNum效果一樣--> <property name="offsetAsPageNum" value="true"/> <!-- 該引數預設為false -->
<!-- 設定為true時,使用RowBounds分頁會進行count查詢 --> <property name="rowBoundsWithCount" value="true"/> <!-- 設定為true時,如果pageSize=0或者RowBounds.limit = 0就會查詢出全部的結果 --> <!-- (相當於沒有執行分頁查詢,但是返回結果仍然是Page型別)--> <property name="pageSizeZero" value="true"/> <!-- 3.3.0版本可用 - 分頁引數合理化,預設false禁用 --> <!-- 啟用合理化時,如果pageNum<1會查詢第一頁,如果pageNum>pages會查詢最後一頁 --> <!-- 禁用合理化時,如果pageNum<1或pageNum>pages會返回空資料 --> <property name="reasonable" value="true"/> <!-- 3.5.0版本可用 - 為了支援startPage(Object params)方法 --> <!-- 增加了一個`params`引數來配置引數對映,用於從Map或ServletRequest中取值 --> <!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,不配置對映的用預設值 --> <!-- 不理解該含義的前提下,不要隨便複製該配置 --> <property name="params" value="pageNum=start;pageSize=limit;"/> </plugin> </plugins>

3. 在Mybatis配置xml中配置攔截器外掛:

如何在程式碼中使用

首先該分頁外掛支援以下兩種呼叫方式:

//第一種,RowBounds方式的呼叫

List<XXX> list = sqlSession.selectList("<-- xxx.xml當中的配置id -->", null, new RowBounds(1, 10));

//第二種,Mapper介面方式的呼叫,推薦這種使用方式。

//小弟深深感受到了面向介面程式設計神奇之處。各位大大見笑了。

PageHelper.startPage(1, 10);List<Country> list = countryMapper.selectIf(1);

為何要用此外掛?

mybatis提供的分頁效率低

Select * from user limit #{p1},#{p2}傳統的分頁有何不足之處?

Select * from user limit #{p1},#{p2} mybatis內部在看到jdbc的Resultset物件時,用遊標定位offset的位置,只處理limit條記錄。

場景:當資料庫105萬條資料,1萬1頁,我要查第一百頁,那就是第1000001到條1010000條,使用這種分頁查詢,先是查詢全部105萬條,然後擷取所對應頁碼的記錄,效率不行。

主要工作原理是什麼?

這個我大體上知道那麼回事,真正讓我追本溯源現在還沒有那個實力。

主要思想:攔截handleResultSets方法來獲取最後的處理結果。

如果要在Spring裡面整合這個分頁外掛,請瀏覽原文。

歡迎指正,歡迎交流