MyBatis插件原理解析(转载)

发布时间 2023-04-04 09:26:47作者: 小草丶

前言

大多数框架都支持插件,用户可通过编写插件来自行扩展功能,Mybatis也不例外。

在Mybatis中最出名的就是PageHelper 分页插件,下面我们先来使用一下这个分页插件。

如何集成分页插件

Spring-Boot+Mybatis+PageHelper

引入pom依赖

<dependency>
   <groupId>com.github.pagehelper</groupId>
   <artifactId>pagehelper-spring-boot-starter</artifactId>
   <version>1.2.3</version>
</dependency>

配置分页插件配置项

pagehelper:
  helperDialect: mysql
  reasonable: true
  supportMethodsArguments: true
  params: count=countSql

service接口代码

PageInfo selectUsersByName(int pageIndex, int pageSize);

service实现类代码

@Override
public PageInfo selectUsersByName(int pageIndex, int pageSize) {
    PageHelper.startPage(pageIndex, pageSize);
    List<User> users = userMapper.selectUsersByName(null);
    return new PageInfo(users);
}

mapper代码

<select id="selectUsersByName" resultMap="User">
    select * from m_user
    <where>
        <if test="userName != null and userName != ''">
            `name` = #{userName}
        </if>
    </where>
</select>
List<User> selectUsersByName(@Param("userName") String userName);

controller代码

@GetMapping("/user/name")
public PageInfo selectUsersByName(int pageIndex, int pageSize) {
    return userService.selectUsersByName(pageIndex, pageSize);
}

然后我们访问

http://localhost:9002/user/name?pageIndex=1&pageSize=10

输出结果:

输出重要项说明:

  • pageNum:当前页码。
  • pageSize:每页数。
  • list:就是我们返回的业务数据。
  • total:总数据。
  • hasNextPage:是否存在下一页。

我们在看看输出SQL:

发现其实执行了两条SQL:count和limit。

猜测分页插件实现