因项目逐渐扩大,需要将服务拆分成多个服务,数据传输层对象携带了些许业务,导致拆分模块无法拆分干净每个模块中可能都存在*mapper.xml文件。
解决方案:
原先配置文件中的mapperLocations = classpath:mapper/**/*Mapper.xml
后面改成mapperLocations = classpath*:mapper/**/*Mapper.xml
注意:这里的classpath后面带了一个*号
其实导致invalid bound statement的根本原因就是 classpath,classpath*加载文件时出现了问题
1、classpath:表示从类路径中加载资源,classpath:和classpath:/是等价,都是相当于类的根路径
2、classpath*:表示会扫描所有的类路径下出现的同名文件,会遍历所有的classpath,加载速度会相对较慢。(因为拆分的时候几乎每个项目都存在这个文件。导致访问部分的mapper.xml会出现 invalid bound statement )
其他可能会出现invalid bound statement 的原因和解决方法:
1、xml 里面的namespace 不对 或者id和mapper里面的方法名不一样,
2、xml的文件名和mapper.java的文件名需要一致
3、配置文件设置的路径和resources下的文件路径不同导致
4、编译问题查看target\class\下是否有这些.xml文件
5、先maven clean 后重新编译。
6、配置错误,扫描报的时候看下mapperScan的路径和自己的文件路径是否相符
7、随意在xml文件中加一个空格或者空行然后保存
8、如果在idea开发的时候打包*Mapper.xml没有自动复制到class输出目录的mapper类报下,需要在pom文件中添加mybatis加载配置文件
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>mapper/**/*Mapper.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>