MyBatis 框架學習——Mybatis分頁之PageHelper插件

前言

如果想要將現有的select語句改爲支持分頁功能的查詢語句該怎麼做呢?最簡單的一種做法就是將所有的select語句都加上limit來實現分頁,這種做法有什麼問題呢?

1、要改動的地方非常多,而且每個sql改動邏輯基本上一致;
2、DAO層的查詢邏輯要改動,要在原來查詢之後執行查詢 SELECT count(1) from …… 查詢數據總條數。
有沒有一種簡便方法實現呢?

Mybatis提供了plugin機制,允許我們在Mybatis的原有處理流程上加入自己邏輯,所有我們就可以使用這種邏輯加上我們的分頁邏輯,也就是實現攔截器。

Mybatis支持的攔截的接口有4個,Executor、ParameterHandler、ResultSetHandler、StatementHandler。

一、使用PageHelper實現分頁

PageHelper實現了通用的分頁查詢,其支持的數據有,mysql、Oracle、DB2、PostgreSQL等主流的數據庫。

該插件託管於github: https://github.com/pagehelper/Mybatis-PageHelper

①.導入依賴

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>3.4.2</version>
</dependency>
<dependency>
    <groupId>com.github.jsqlparser</groupId>
    <artifactId>jsqlparser</artifactId>`在這裏插入代碼片`
    <version>0.9.1</version>
</dependency>

②.在全局配置文件中配置插件

<plugins>
    <!-- com.github.pagehelper爲PageHelper類所在包名 -->
    <plugin interceptor="com.github.pagehelper.PageHelper">
        <!-- 方言 -->
        <property name="dialect" value="mysql"/>
        <!-- 該參數默認爲false -->
        <!-- 設置爲true時,使用RowBounds分頁會進行count查詢 -->
        <property name="rowBoundsWithCount" value="true"/>
    </plugin>
</plugins>

③.編寫接口

public List<User> queryUserListLikeName(@Param("name") String name);

④.編寫映射文件

<select id="queryUserListLikeName" parameterType="String" resultType="User">
    SELECT <include refid="my.common.userColumns"/> FROM tb_user WHERE name LIKE '%${name}%'   
</select>

⑤.測試分頁

@Test
public void testQueryUserListLikeName() {
    //設置分頁條件,Parameters:pageNum 頁碼pageSize 每頁顯示數量count 是否進行count查詢
    PageHelper.startPage(1, 3, true);
    List<User> users = this.userMapper.queryUserListLikeName(null);

    for (User user : users) {
        System.out.println(user);
    }
}

結果:
在這裏插入圖片描述
可以使用PageInfo 查看分頁信息

@Test
public void testQueryUserListLikeName() {
    //設置分頁條件,Parameters:pageNum 頁碼pageSize 每頁顯示數量count 是否進行count查詢
    PageHelper.startPage(1, 3, true);
    List<User> users = this.userMapper.queryUserListLikeName(null);

    PageInfo<User> pageInfo = new PageInfo<User>(users);

    //打印分頁信息
    System.out.println("數據總數:" + pageInfo.getTotal());
    System.out.println("數據總頁數:" + pageInfo.getPages());
    System.out.println("最後一頁:" + pageInfo.getLastPage());

    for (User user : pageInfo.getList()) {
        System.out.println(user);
    }
}

PageInfo的方法
在這裏插入圖片描述

二、Mybatis批量增刪改

批量刪除
在這裏插入圖片描述

批量增加

在這裏插入圖片描述

批量修改
在這裏插入圖片描述

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