IDEA修改Mybatis XML文件后报错Invalid bound statement (not found)如何永久解决
IDEA 2021 Mybatis XML修改后target文件丢失解决方案
问题根因
该问题是IDEA 2021版本自带的增量编译逻辑与Maven资源处理规则不兼容导致:修改src/main/resources下的XML文件后执行增量部署时,IDEA没有将更新后的XML文件同步拷贝到target/classes对应目录,反而会误删原有XML文件,最终触发Mybatis Invalid bound statement错误。
永久修复步骤
1. 对齐IDEA与Maven的构建逻辑
- 打开
File > Settings > Build, Execution, Deployment > Build Tools > Maven > Runner - 勾选
Delegate IDE build/run actions to Maven,所有构建、运行操作完全交给Maven处理,避免IDEA自带编译逻辑的兼容问题 - 进入
File > Settings > Build, Execution, Deployment > Compiler - 勾选
Build project automatically,确认Resource patterns配置项包含*.xml规则,保证XML文件会被识别为资源文件同步到target目录
2. 完善pom.xml资源配置
在项目pom.xml的<build>节点下明确指定资源文件扫描规则,确保所有Mybatis XML都会被正确处理:
<build> <resources> <!-- 扫描resources目录下的所有配置文件 --> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.yml</include> <include>**/*.yaml</include> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> <!-- 若你的Mybatis XML存放在src/main/java的mapper目录下,需新增此配置 --> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> </build>
3. 配置Mybatis XML热重载(可选,优化开发效率)
如果项目使用了spring-boot-devtools热部署组件,在项目配置文件中补充如下配置,修改XML后无需重启项目即可生效:
# 普通Mybatis配置前缀 mybatis: mapper-locations: classpath:mapper/*.xml # 替换为你项目中XML的实际存放路径 configuration: lazy-loading-enabled: true # 若使用Mybatis Plus,使用如下配置前缀 # mybatis-plus: # mapper-locations: classpath:mapper/*.xml
4. 修复IDEA 2021版本专属bug
IDEA 2021全版本存在增量构建误删资源文件的已知问题,可通过VM参数关闭该异常逻辑:
- 打开
Help > Edit Custom VM Options - 新增一行配置:
-Didea.compiler.incremental.allow.resource.reaping=false - 保存配置后重启IDEA生效
验证方法
完成上述配置后,任意修改一个Mybatis XML的内容,点击IDEA顶部的构建按钮(锤子图标),查看target/classes下对应XML文件是否存在且内容已更新,确认正常后后续修改无需再执行mvn clean package。
内容的提问来源于stack exchange,提问作者frank
相关产品推荐
相关产品推荐

