Skip to content

Spring Boot 整合 MyBatis-Plus:依赖、配置与常见踩坑

知识背景

在 Spring Boot 项目中使用 MP,通常引入 mybatis-plus-boot-starter,配置 数据源、Mapper 扫描、分页插件、主键策略,即可与 Spring事务、校验、全局异常 同一套工程内协作。
本文串联「能跑起来」的最小知识与 高频报错,便于对照官方文档落地。


知识详解与通俗解释

1. 依赖与自动配置

  • 引入 starter后,Spring Boot 会注册 SqlSessionFactory 等 Bean;具体与 spring-boot-starter-jdbc / 连接池 配合。
  • 不要 同时混用旧版 mybatis-spring-boot-starter 与 MP starter 导致版本冲突,以 MP 官方 BOM/文档 为准统一版本。

2. 必备配置项(概念级)

  • @MapperScan("com.xxx.mapper"):扫描 Mapper 接口。
  • 数据源:URL、用户名密码、连接池(Hikari 等)。
  • MyBatis 配置map-underscore-to-camel-case、XML mapper-locations(若仍用 XML)。
  • 分页插件MybatisPlusInterceptor + PaginationInnerInterceptor(DbType.MYSQL)

3. 与 Spring 事务

@Transactional 加在 Service 上;自调用(同类内 this.method())可能绕开代理导致事务不生效——需注入自身或拆类。
只读查询可标 readOnly = true(视数据库与驱动而定)。

4. 常见踩坑

现象可能原因
Invalid bound statementXML 路径与 mapper-locations 不一致,或 namespace 错误
分页 total 为 0未注册分页插件或方言不对
字段全 null实体未与表字段映射,或未开下划线转驼峰
更新了 0 行主键未设、@TableId 类型与库不一致、逻辑删除条件拦截

5. 与 Redis / 缓存

Service 层 先查缓存再查库 时,注意 事务边界:缓存更新与 DB 提交顺序决定一致性,参考缓存三连击(穿透/击穿/雪崩)文章做分级策略。


总结

  • starter + MapperScan + 数据源 + 分页插件 是骨架。
  • 版本与 原生 MyBatis starter 冲突要优先排除。
  • 生产还需:连接池参数、慢 SQL、索引与事务边界——MP 只解决一半,另一半在 MySQL 与架构。