Mybatis-Plus分页插件配置

tim-qtp...大约 1 分钟Mybatis-Plus脚手架

@Configuration
@MapperScan("com.xuecheng.content.mapper")
public class MybatisPlusConfig {
    /**
     * 新的分页插件
     * 需要设置 MybatisConfiguration#useDeprecatedExecutor = false
     * 避免缓存出现问题(该属性会在旧插件移除后一同移除)
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
       MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
       interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
       return interceptor;
    }
}

作用

  1. 自动扫描 Mapper 接口@MapperScan 可以指定一个或多个包路径,Spring 会自动扫描这些包下的 Mapper 接口,并将它们注册为 Bean。
  2. 简化配置 如果没有 @MapperScan,你需要为每个 Mapper 接口添加 @Mapper 注解。而使用 @MapperScan 后,可以一次性扫描整个包,避免手动为每个 Mapper 接口添加注解。
  3. 与 Spring 集成 从而可以在 Service 层或其他组件中通过 @Autowired 注入使用。

分页插件的原理是什么

MyBatis-Plus 的分页插件基于 MyBatis 的 Interceptor(拦截器)实现。它会拦截 sql语句,根据分页参数(如 pagesize)对原始 SQL 进行改造,比如在 MySQL 中,会在 SQL 后面追加 LIMITOFFSET

为了实现分页功能,插件会自动生成一条统计总记录数的 SQL(SELECT COUNT(*) ...

查询完成后,分页插件会将数据封装到 IPage 接口的实现类中(如 Page 对象),方便开发者直接使用。

自动生成的 SQL

在执行 selectPage 时,分页插件会改造 SQL:

  1. 统计总记录数:

    SELECT COUNT(*) FROM user;
    
  2. 分页查询:

    SELECT id, name, age FROM user LIMIT 2 OFFSET 2;