Java書籤 # MyBatis分頁插件PageHelper應用方案

楔子:願你三冬暖,願你春不寒。願你天黑有燈,下雨有傘。願你一路上,有良人相伴。 

 

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/

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章