开发者

Mybatis-Plus 3.5.12 分页拦截器消失的问题及快速解决方法

开发者 https://www.devze.com 2025-08-14 12:00 出处:网络 作者: 一叶飘零_sweeeet
目录一、问题场景:分页拦截器突然 “失踪”二、问题根源:依赖拆分惹的祸三、解决办法:添加扩展依赖四、分页功能完整使用指南步骤 1:配置分页拦截器步骤 2:编写 Mapper 接口步骤 3:Service 层调用步骤
目录
  • 一、问题场景:分页拦截器突然 “失踪”
  • 二、问题根源:依赖拆分惹的祸
  • 三、解决办法:添加扩展依赖
  • 四、分页功能完整使用指南
    • 步骤 1:配置分页拦截器
    • 步骤 2:编写 Mapper 接口
    • 步骤 3:Service 层调用
    • 步骤 4:Controller 层使用
    • 步骤 5:分页结果解析
  • 五、常见问题排查
    • 六、总结

      作为 Java 开发者,我们都爱用 MyBATis-Plus 简化 CRUD 操作,尤其是它的分页功能,几行代码就能搞定复杂的分页查询。但最近有位朋友在集成 Mybatis-Plus 3.5.12 版本时踩了个坑:PaginationInnerInterceptor类突然找不到了!这篇文章就来聊聊这个问题的来龙去脉,教你快速解决,还会附赠分页功能的完整使用指南。

      一、问题场景:分页拦截器突然 “失踪”

      先看一段熟悉的配置代码,这是我们常用的 Mybatis-Plus 分页配置:

      package com.xx.config.mybatis;
      import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
      import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
      import org.mybatis.spring.annotation.MapperScan;
      import org.springframework.context.annotation.Bean;
      import org.springframework.context.annotation.Configuration;
      @Configuration
      @MapperScan({"com.sq编程客栈.twinbee.**.mapper"})
      public class MybatisPlusConfig {
      @Bean
      public MybatisPlusInterceptor mybatisPlusInterceptor() {
      MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
      //js 添加分页拦截器
      interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
      return interceptor;
      }
      }

      当使用 Mybatis-Plus 3.5.12 版本时,IDE 突然报错:PaginationInnerInterceptor类不存在!这是怎么回事?明明之前的版本用得好好的,难道是版本升级后类被移除了?

      二、问题根源:依赖拆分惹的祸

      其实不是类被移除了,而是 Mybatis-Plus 在 3.5.0 版本后对依赖进行了拆分。在早期版本中,分页插件和核心包是捆绑在一起的,但从 3.5.0 开始,官方将一些扩展功能(包括分页插件)单独拆分成了mybatis-plus-extension模块。

      如果你在 pom.XML 中只引入了核心包:

      <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-core</artifactId>
      <version>3.5.12</version>
      </dependency>

      就会找不到PaginationInnerInterceptor,因为它已经被移到mybatis-plus-extension里了。

      三、解决办法:添加扩展依赖

      只需在 pom.xml 中添加mybatis-plus-extension依赖,问题就能迎刃而解:

      <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-extension</artifactId>
      <version>3.5.12</version>
      </dependency>

      为什么这行依赖能解决问题?

      • mybatis-plus-extension是 Mybatis-Plus 的扩展模块,包含了分页插件、性能分析插件等增强功能
      • 3.5.12 版本严格遵循 “按需引入” 原则,核心包只保留最基础的 CRUD 功能
      • 扩展模块与核心包版本必须保持一致,否则可能出现兼容性问题
      javascript

      四、分页功能完整使用指南

      解决了依赖问题,我们再来完整梳理一下 Mybatis-Plus 分页功能的使用步骤,确保新手也能快速上手。

      步骤 1:配置分页拦截器

      就是我们开头提到的配置类,这里再强调几个注意点:

      @Configuration
      @MapperScan({"com.xx.**.mapper"}) // 扫描Mapper接口所在包
      public class MybatisPlusConfig {
      @Bean
      public MybatisPlusInterceptor mybatisPlusInterceptor() {
      MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
      // 注意:这里可以指定数据库类型,避免分页语句适配问题
      interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.mysql));
      return interceptor;
      }
      }

      关键说明

      • 建议明确指定数据库类型(如DbType.MYSQL),Mybatis-Plus 会根据数据库类型生成对应的分页 SQL(MySQL 用 LIMIT,oracle 用 ROWNUM)
      • 拦截器可以添加多个,比如同时添加分页拦截器和乐观锁拦截器

      步骤 2:编写 Mapper 接口

      无需手动写分页 SQL,直接继承BaseMapper即可:

      public interface UserMapper extends BaseMapper<User> {
      // 自定义分页查询(可选)
      IPage<User> selectUserByAge(Page<User> page, @Param("age") Integer age);
      }

      步骤 3:Service 层调用

      @Service
      public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
      @Override
      public IPage<User> getUserPage(Integer pageNum, Integer pageSize) {
      // 创建分页对象
      Page<User> page = new Page<>(pageNum, pageSize);
      // 调用BaseMapper的selectPage方法
      return baseMapper.selectPage(page, null);
      }
      @Override
      public IPage<User> getUserByAge(Integer pageNum, Integer pageSize, Integer age) {
      Page<User> page = new Page<>(pageNum, pageSize);
      // 调用自定义分页方法
      return baseMapper.selectUserByAge(page编程客栈, age);
      }
      }

      步骤 4:Controller 层使用

      @RestController
      @RequestMapping("/user")
      public class UserController {
      @Autowired
      private UserService userService;
      @GetMapping("/page")
      public Result<IPage<User>> getUserPage(
      @RequestParam(defaultValue = "1") Integer pageNum,
      @RequestParam(defaultValue = "10") Integer pageSize) {
      IPage<User> page = userService.getUserPage(pageNum, pageSize);
      return Result.success(page);
      }
      }

      步骤 5:分页结果解析

      分页查询返回的IPage对象包含了丰富的分页信息:

      {
      "code": 200,
      "msg": "success",
      "data": {
      "records": [
      {"id": 1, "name": "张三", "age": 20},
      {"id": 2, "name": "李四", "age": 22}
      ],
      "totalphp": 100, // 总记录数
      "size": 10, // 每页条数
      "current": 1, // 当前页码
      "pages": 10, // 总页数
      "hasNext": true, // 是否有下一页
      "hASPrevious": false // 是否有上一页
      }
      }

      五、常见问题排查

      • 分页不生效?
        • 检查是否配置了分页拦截器
        • 确认依赖是否正确引入
        • 查看是否有多个拦截器冲突
      • 分页语句错误?
        • 确保指定了正确的数据库类型
        • 检查实体类与表结构映射是否正确
      • 依赖冲突?
        • 用mvn dependency:tree查看依赖树,排除冲突版本
        • 确保 Mybatis-Plus 各模块版本一致

      六、总结

      Mybatis-Plus 的分页功能大大简化了我们的开发工作,但版本升级带来的依赖变化可能会让新手踩坑。记住 3.5.x 版本后需要单独引入mybatis-plus-extension依赖才能使用分页拦截器,这是解决PaginationInnerInterceptor类不存在问题的关键。

      希望这篇文章能帮你彻底搞懂 Mybatis-Plus 分页功能的配置和使用,如果你还有其他相关问题,欢迎在评论区交流!

      到此这篇关于Mybatis-Plus 3.5.12 分页拦截器消失的文章就介绍到这了,更多相关MybatisPlus 分页拦截器内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

      0

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      关注公众号