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

2025-08-10 22:50

本文主要是介绍Mybatis-Plus 3.5.12 分页拦截器消失的问题及快速解决方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Mybatis-Plus3.5.12分页拦截器消失的问题及快速解决方法》作为Java开发者,我们都爱用Mybatis-Plus简化CRUD操作,尤其是它的分页功能,几行代码就能搞定复杂的分页查询...

作为 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.sqChina编程.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(pageChina编程, 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 分页拦截器内容请搜索编程China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于Mybatis-Plus 3.5.12 分页拦截器消失的问题及快速解决方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1155665

相关文章

检查 Nginx 是否启动的几种方法

《检查Nginx是否启动的几种方法》本文主要介绍了检查Nginx是否启动的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1. 使用 systemctl 命令(推荐)2. 使用 service 命令3. 检查进程是否存在4

Java方法重载与重写之同名方法的双面魔法(最新整理)

《Java方法重载与重写之同名方法的双面魔法(最新整理)》文章介绍了Java中的方法重载Overloading和方法重写Overriding的区别联系,方法重载是指在同一个类中,允许存在多个方法名相同... 目录Java方法重载与重写:同名方法的双面魔法方法重载(Overloading):同门师兄弟的不同绝

MySQL字符串转数值的方法全解析

《MySQL字符串转数值的方法全解析》在MySQL开发中,字符串与数值的转换是高频操作,本文从隐式转换原理、显式转换方法、典型场景案例、风险防控四个维度系统梳理,助您精准掌握这一核心技能,需要的朋友可... 目录一、隐式转换:自动但需警惕的&ld编程quo;双刃剑”二、显式转换:三大核心方法详解三、典型场景

Python实现快速扫描目标主机的开放端口和服务

《Python实现快速扫描目标主机的开放端口和服务》这篇文章主要为大家详细介绍了如何使用Python编写一个功能强大的端口扫描器脚本,实现快速扫描目标主机的开放端口和服务,感兴趣的小伙伴可以了解下... 目录功能介绍场景应用1. 网络安全审计2. 系统管理维护3. 网络故障排查4. 合规性检查报错处理1.

MySQL快速复制一张表的四种核心方法(包括表结构和数据)

《MySQL快速复制一张表的四种核心方法(包括表结构和数据)》本文详细介绍了四种复制MySQL表(结构+数据)的方法,并对每种方法进行了对比分析,适用于不同场景和数据量的复制需求,特别是针对超大表(1... 目录一、mysql 复制表(结构+数据)的 4 种核心方法(面试结构化回答)方法 1:CREATE

Springboot3统一返回类设计全过程(从问题到实现)

《Springboot3统一返回类设计全过程(从问题到实现)》文章介绍了如何在SpringBoot3中设计一个统一返回类,以实现前后端接口返回格式的一致性,该类包含状态码、描述信息、业务数据和时间戳,... 目录Spring Boot 3 统一返回类设计:从问题到实现一、核心需求:统一返回类要解决什么问题?

详解C++ 存储二进制数据容器的几种方法

《详解C++存储二进制数据容器的几种方法》本文主要介绍了详解C++存储二进制数据容器,包括std::vector、std::array、std::string、std::bitset和std::ve... 目录1.std::vector<uint8_t>(最常用)特点:适用场景:示例:2.std::arra

springboot中配置logback-spring.xml的方法

《springboot中配置logback-spring.xml的方法》文章介绍了如何在SpringBoot项目中配置logback-spring.xml文件来进行日志管理,包括如何定义日志输出方式、... 目录一、在src/main/resources目录下,也就是在classpath路径下创建logba

解决idea启动项目报错java: OutOfMemoryError: insufficient memory

《解决idea启动项目报错java:OutOfMemoryError:insufficientmemory》:本文主要介绍解决idea启动项目报错java:OutOfMemoryError... 目录原因:解决:总结 原因:在Java中遇到OutOfMemoryError: insufficient me

SQL Server中行转列方法详细讲解

《SQLServer中行转列方法详细讲解》SQL行转列、列转行可以帮助我们更方便地处理数据,生成需要的报表和结果集,:本文主要介绍SQLServer中行转列方法的相关资料,需要的朋友可以参考下... 目录前言一、为什么需要行转列二、行转列的基本概念三、使用PIVOT运算符进行行转列1.创建示例数据表并插入数