怎么解决MyBatis开发中XML修改后需要重启的问题_MyBatis-Plus热加载插件配置

云敏姑娘_1477

云敏姑娘_1477

2026-03-20

970人浏览

原创

MyBatis XML 修改不生效主因是未启用热加载,需引入 mybatis-spring-boot-devtools 插件并配置 enable: true,确保 XML 路径匹配、文件名与接口名一致,且避免手动定义 SqlSessionFactory 或跨文件 include。

怎么解决mybatis开发中xml修改后需要重启的问题_mybatis-plus热加载插件配置

MyBatis XML 文件修改后不生效,是不是没开热加载?

不是所有 MyBatis 项目默认支持 XML 热加载,尤其在 Spring Boot + MyBatis-Plus 场景下,mybatis-plus 本身不内置 XML 热重载能力,靠的是底层 MyBatis 的 configuration.setEnvironment() 重建逻辑或第三方插件触发刷新。常见现象是改了 xxxMapper.xml,接口返回旧 SQL,日志里也看不到新语句——这基本说明 XML 没被重新解析。

devtools + mybatis-spring-boot-devtools 插件怎么配才真正生效?

Spring Boot DevTools 只负责类路径资源变更通知,它不会自动告诉 MyBatis “XML 更新了”。必须配合 mybatis-spring-boot-devtools(注意不是官方 mybatis-spring-boot-starter 自带的)才能监听 *.xml 并触发 SqlSessionFactory 刷新。关键点在于版本对齐和配置开关:

  • 用 Maven 引入 com.github.xiaoymin:mybatis-spring-boot-devtools,版本需匹配你的 mybatis-plus-boot-starter(例如 3.5.x 对应 devtools 1.0.x)
  • 在 application.yml 中显式开启:
    mybatis-plus:
      devtools:
        reload:
          enable: true
  • 确保 XML 文件放在 src/main/resources/mapper/ 或你配置的 mybatis-plus.mapper-locations 路径下,否则插件找不到文件
  • IDE 中关闭 “Build project automatically”(IntelliJ 默认关),改用 Ctrl+Shift+F9 手动编译,否则 DevTools 不触发资源变更事件

为什么加了插件还是不刷新?常见卡点在哪?

最常踩的坑不是配置错,而是环境干扰:

  • SqlSessionFactory 被声明为 @Bean 且用了自定义 Configuration 实例:插件只接管 Spring 容器托管的默认工厂,手动 new 出来的不响应
  • 用了 @MapperScan 扫描注解式 Mapper,但 XML 文件名和接口名不严格匹配(如 UserMapper.java 对应 UserMapper.xml),插件无法关联映射关系
  • 启动时控制台没打印 [MybatisDevTools] Watching for changes in mapper XML files... —— 说明插件根本没加载,检查是否被 Maven optional=true 或依赖冲突屏蔽
  • XML 里写了 ,但被引用的 片段在另一个 XML 文件里:插件目前不追踪跨文件依赖,改了被 include 的文件不会触发主文件重载

MyBatis-Plus 3.5+ 内置的 XML 热加载要不要用?

3.5.0+ 确实新增了 mybatis-plus.configuration.devtool-reload-enabled=true 开关,但它依赖 MyBatis 原生的 XMLMapperBuilder 重解析机制,实际表现不稳定:

  • 仅支持单个 XML 文件内变更,不处理 、 或动态 SQL 标签内容变化
  • 重启 SqlSession 时可能引发事务中已打开 session 的状态不一致,出现 Cannot commit when auto commit is enabled 类错误
  • 和 DevTools 插件共存时容易冲突,建议二选一,优先用插件方案

复杂点在于:XML 热加载本质是“局部刷新”,但 MyBatis 的映射注册是全局的;一旦某个 XML 解析失败,整个 SqlSessionFactory 重建会失败,导致服务短暂不可用——这点很容易被忽略,上线前务必在本地验证异常场景下的恢复行为。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
mybatis一级缓存和二级缓存
mybatis一级缓存和二级缓存

在MyBatis中,一级缓存和二级缓存是两种不同级别的缓存机制,它们都可以用来提高性能。本专题提供mybatis一级缓存和二级缓存相关文章,大家可以免费阅读。

2023.08.21

583

4

ibatis和mybatis有什么区别
ibatis和mybatis有什么区别

ibatis和mybatis的区别:1、基本信息不同;2、开发时间不同;3、功能与易用性;4、配置文件;5、入参类型与出参类型;6、返回结果集接受方式;7、语法差异;8、数据库方言支持;9、插件支持;10、社区活跃度;11、全球化支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

2882

5

mybatis如何配置数据库连接
mybatis如何配置数据库连接

mybatis配置数据库连接的方法:1、指定数据源;2、配置事务管理器;3、配置类型处理器和映射器;4、使用环境元素;5、配置别名。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

446

5

mybatis工作原理及流程是什么
mybatis工作原理及流程是什么

mybatis工作原理及流程:1、配置文件;2、接口与映射;3、sql解析与生成;4、执行计划;5、结果处理;6、动态sql;7、缓存机制;8、插件;9、事务管理;10、日志与监控;11、扩展性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

292

4

hibernate和mybatis有哪些区别
hibernate和mybatis有哪些区别

hibernate和mybatis的区别:1、实现方式;2、性能;3、对象管理的对比;4、缓存机制。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

302

5

Java MyBatis框架
Java MyBatis框架

本专题专注于Java主流ORM框架MyBatis的应用,系统讲解SQL映射、动态SQL、结果映射、分页查询、缓存机制与多表关联等核心内容,并结合企业管理系统、电商平台和后台管理项目实战,帮助学员全面掌握高效的数据库持久层开发技能。

2025.08.26

6249

22

Tailwind CSS 如何制作导航栏和卡片
Tailwind CSS 如何制作导航栏和卡片

用 Tailwind CSS 制作导航栏和卡片,可先搭建语义化结构,再组合 Flex、Grid、间距、圆角与阴影类。这里整理横向导航、移动端菜单、卡片网格及悬停效果的相关文章,帮助你把常见页面组件做得清晰且适配不同屏幕。

2026.11.03

0

17

Tailwind CSS 响应式布局怎么写
Tailwind CSS 响应式布局怎么写

Tailwind CSS 响应式布局通常从移动端样式写起,再用 sm、md、lg 等前缀调整不同屏幕宽度下的网格、间距和导航。本专题整理断点配置、Grid 与 Flex 自适应布局及常见溢出问题,帮助你逐步完成多设备适配。

2026.11.03

0

19

Tailwind CSS 常用类名怎么记
Tailwind CSS 常用类名怎么记

Tailwind CSS 类名很多,先按布局、间距、文字、颜色和状态分组记忆,再通过官方文档检索具体写法。本专题结合类名排序、动态拼接失效、自定义实用类等问题,帮助你建立常用类名的速查方法。

2026.11.03

0

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习