楔子:願你三冬暖,願你春不寒。願你天黑有燈,下雨有傘。願你一路上,有良人相伴。
1.書籤記要
使用 com.github.pagehelper.PageHelper 簡潔方便地實現分頁查詢和 count 查詢。
2.解決方案
三步上手:
2.1.依賴插件
在項目的 pom.xml 中添加該插件依賴:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.4</version>
</dependency>
2.2.配置插件
在項目 resources 下在 MyBatis 配置 xml 中(如 mybatis.xml)配置攔截器插件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD SQL MAP Config 3.1//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 分頁插件的配置 -->
<!-- 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"/>
</plugin>
</configuration>
注:分頁插件可選參數如下:
dialect:默認情況下會使用 PageHelper 方式進行分頁,如果想要實現自己的分頁邏輯,可以實現 Dialect(com.github.pagehelper.Dialect) 接口,然後配置該屬性爲實現類的全限定名稱。詳見:https://pagehelper.github.io/docs/howtouse/
好了,到此,PageHelper 插件配置完成。
2.3.使用插件
在需要進行分頁的 MyBatis 查詢方法前調用 PageHelper.startPage 靜態方法即可,緊跟在這個方法後的第一個 MyBatis 查詢方法會被進行分頁。如:
PageHelper.startPage(1, 10);
OrderBean orderCondition = new OrderBean();
orderCondition.setUserId(888L);
List<OrderInfoBO> orderInfoList = orderMapper.queryOrderList(orderCondition);
PageHelper.startPage 第一個參數表示第幾頁,第二個參數表示每頁顯示多少記錄。這樣在執行SQL後就會將記錄按照語句中的分頁設置進行分頁查詢。
如果需要在分頁查詢時進行 count 查詢獲取總記錄數的話,可以使用更強大的 PageInfo 類,它會對結果進行包裝。
2.4.測試插件
寫個測試用例驗證一下吧:
@Autowired
private OrderMapper orderMapper;
@Test
public void testQueryMyOrderList() {
int pageNo = 1; int pageSize = 10;
PageHelper.startPage(pageNo, pageSize);
OrderBean orderCondition = new OrderBean();
orderCondition.setUserId(888L);
List<OrderInfoBO> orderInfoList = orderMapper.queryOrderList(orderCondition);
PageInfo pageInfo = new PageInfo(myOrderInfoLimitList);
System.out.println(JSON.toJSONString(pageInfo));
// 測試 PageInfo 全部屬性,PageInfo 包含了非常全面的分頁屬性
// 當前頁碼
assertEquals(1, pageInfo.getPageNum());
// 每頁記錄數
assertEquals(10, pageInfo.getPageSize());
// 獲取當前頁第一條
assertEquals(1, pageInfo.getStartRow());
// 獲取當前頁最後一條
assertEquals(10, pageInfo.getEndRow());
// 查詢結果總記錄數
assertEquals(363, pageInfo.getTotal());
// 分頁查詢結果的總頁數
assertEquals(37, pageInfo.getPages());
// 第一頁頁碼
assertEquals(1, pageInfo.getFirstPage());
// 最後一頁頁碼
assertEquals(8, pageInfo.getLastPage());
// 下一頁頁碼
assertEquals(2, pageInfo.getNextPage());
// 是否是第一頁
assertEquals(true, pageInfo.isIsFirstPage());
// 是否是最後一頁
assertEquals(false, pageInfo.isIsLastPage());
// 是否有上一頁
assertEquals(false, pageInfo.isHasPreviousPage());
// 是否有下一頁
assertEquals(true, pageInfo.isHasNextPage());
}
參考資料:
PageHelper GitHub:https://github.com/pagehelper/Mybatis-PageHelper
如何使用分頁插件:https://pagehelper.github.io/docs/howtouse/