PageHelper是國人開源的一款MyBatis擴展插件,可以幫助完成自動分頁功能。PageHelper自動分頁插件使用非常簡單,如果持久層框架用的是MyBatis,建議使用該分頁插件。
引入分頁插件
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.11</version>
</dependency>
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
</dependency>
分頁插件參數介紹
下面幾個參數都是針對默認 dialect 情況下的參數。使用自定義 dialect 實現時,下面的參數沒有任何作用。
-
helperDialect:分頁插件會自動檢測當前數據庫url鏈接,判斷數據庫類型自動選擇合適的分頁方式。也可以配置helperDialect屬性來指定分頁插件使用哪種數據庫方言(mysql、oracle、sqlite、db2、sqlserver等)。
-
reasoonable:分頁合理化參數,默認值爲false。當該參數設置爲 true 時,pageNum<=0 時會查詢第一頁, pageNum>pages(超過總數時),會查詢最後一頁。默認false 時,直接根據參數進行查詢,即pageNum=-1時,就會查詢-1頁,這樣就會導致出錯。(強烈建議設置該屬性爲true)
-
更多參數請參照官網
在mybatis-config.xml中配置攔截器插件
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!--設置數據庫類型-->
<property name="pageDialect" value="mysql"/>
<!--設置分頁合理化-->
<property name="reasonable" value="true"/>
</plugin>
</plugins>
在代碼中使用
<select id="selectPage" resultType="User">
select * from t_user where age < 45
</select>
@Test
public void testPageHelper(){
SqlSession sqlSession = null;
try{
sqlSession = MyBatisUtils.openSession();
/* 開啓自動分頁,startPage()方法會自動將下一次查詢進行分頁 */
PageHelper.startPage(pageNum, pageSize); //pageNum是頁碼,pageSize是頁寬
//獲取分頁對象
List<User> userList = (Page) sqlSession.selectList("selectPage");
//得到分頁結果對象,分頁信息都保存在pageInfo中
PageInfo<User> page = new PageInfo<>(userList);
System.out.println("總頁數:" + page.getPages());
System.out.println("總記錄數:" + page.getTotal());
System.out.println("開始行號:" + page.getstartRow());
System.out.println("結束行號:" + page.getEndRow());
System.out.println("當前頁碼:" + page.getPageNum());
List<User> data = page.getResult(); //當前頁的數據
for(User u : data){
System.out.println(u.getUserName());
}
}catch (Exception e){
throw e;
}finally {
MyBatisUtils.closeSession(sqlSession);
}
}
總結:
想要實現分頁需要做哪些事:
-
當前頁數據查詢:select * from tab limit 0, 10
-
總記錄數查詢:select count(*) from tab
-
通過程序計算總頁數,上一頁頁碼,下一頁頁碼
當在使用了PageHelper分頁插件後,這些事都不需要我們來做了,PageHelper會自動幫我們來完成。並且還擴充了更多的功能。