返回顶部
分享到

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

java 来源:互联网 作者:佚名 发布时间:2025-08-10 17:26:23 人浏览
摘要

作为 Java 开发者,我们都爱用 Mybatis-Plus 简化 CRUD 操作,尤其是它的分页功能,几行代码就能搞定复杂的分页查询。但最近有位朋友在集成 Mybatis-Plus 3.5.12 版本时踩了个坑:PaginationInnerIntercep

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

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

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();

// 添加分页拦截器

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 中只引入了核心包:

1

2

3

4

5

<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依赖,问题就能迎刃而解:

1

2

3

4

5

<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 功能
  • 扩展模块与核心包版本必须保持一致,否则可能出现兼容性问题

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

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

步骤 1:配置分页拦截器

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

1

2

3

4

5

6

7

8

9

10

11

@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即可:

1

2

3

4

public interface UserMapper extends BaseMapper<User> {

// 自定义分页查询(可选)

IPage<User> selectUserByAge(Page<User> page, @Param("age") Integer age);

}

步骤 3:Service 层调用

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

@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 层使用

1

2

3

4

5

6

7

8

9

10

11

12

13

@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对象包含了丰富的分页信息:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

{

"code": 200,

"msg": "success",

"data": {

"records": [

{"id": 1, "name": "张三", "age": 20},

{"id": 2, "name": "李四", "age": 22}

],

"total": 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 分页功能的配置和使用,如果你还有其他相关问题,欢迎在评论区交流!


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计