在使用 Spring Boot 3 整合 MyBatis Plus 分页插件时,常见的一个问题是分页查询返回结果为空或不分页。这通常是由于未正确配置 MyBatis Plus 的分页拦截器(PaginationInnerInterceptor)或未在启动类中启用分页功能所致。此外,在 Spring Boot 3 中由于默认使用的 JDK 版本较高,部分开发者可能误用了旧版本的配置方式,导致插件未生效。如何正确配置 MyBatis Plus 分页插件并确保其在 Spring Boot 3 环境中正常工作?
1条回答 默认 最新
薄荷白开水 2025-10-21 23:54关注在 Spring Boot 3 中正确配置 MyBatis Plus 分页插件的深度解析
1. 问题背景与初步分析
在使用 Spring Boot 3 整合 MyBatis Plus 时,开发者常常会遇到分页查询返回结果为空或不分页的问题。这通常源于对分页插件(PaginationInnerInterceptor)配置不当,或者未在启动类中启用相关功能。
- MyBatis Plus 的分页功能依赖于拦截器机制
- Spring Boot 3 默认使用 JDK 17 或更高版本,可能导致兼容性问题
- 旧版配置方式不再适用,需采用新方式适配 Spring Boot 3 的自动装配机制
2. 分页插件配置的基本步骤
- 引入 MyBatis Plus Starter 依赖
- 创建配置类并注册 PaginationInnerInterceptor 拦截器
- 确保在 Mapper 接口中使用 Page 对象进行分页查询
@Configuration public class MyBatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } }3. 常见错误与排查方法
常见错误 可能原因 解决方案 分页查询结果为空 SQL 查询无匹配数据 检查数据库是否含有符合条件的数据 分页失效,返回全部数据 未正确注册 PaginationInnerInterceptor 确认配置类已加载并注册拦截器 Page 对象参数无效 未使用正确的构造方式 使用 new Page<>(pageNum, pageSize) 创建分页对象 4. 高级配置与性能优化建议
随着项目复杂度上升,简单的分页配置可能无法满足需求。以下为进阶配置建议:
- 结合 DbType 枚举设置合适的数据库类型,以支持不同数据库的分页语法
- 开启自动优化 LIMIT 查询语句的功能
- 通过 SQL 日志调试确认是否真正执行了分页逻辑
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL, 5)); // 第二个参数表示单页最大记录数限制,防止恶意请求5. Spring Boot 3 特有注意事项
Spring Boot 3 升级到 Jakarta EE 9 后包名由 javax 改为 jakarta,因此需要特别注意以下几点:
- 确保所有依赖库兼容 Jakarta EE 9+(如 MyBatis Plus 3.5+)
- 避免手动导入旧版 MyBatis 配置导致冲突
- 使用 Spring Boot 的自动装配机制管理 Bean 生命周期
6. 完整流程图展示分页调用链
graph TD A[Controller接收分页参数] --> B[Service层调用Mapper] B --> C[MyBatis Plus 自动应用分页拦截器] C --> D[生成带 LIMIT 的 SQL 语句] D --> E[数据库执行查询] E --> F[返回分页结果]本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报