Spring Boot项目MyBaits提示Invalid bound statement (not found)错误

一、问题

一个SpringBoot项目在STS中是正常的,没有任何问题,但是导入到IDEA中之后启动就提示 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)错误

该错误提示没有找到相对应的XML文件,找了很长时间发现在编译后的classes路径下并没有相应的XML文件,这是因为IDEA在编译的时候忽略掉了XML文件,一个解决方法是将所有的XML文件移动到Resource文件夹下,这样在编译的时候就会将XML文件一起.

移动文件夹后修改配置文件中的MyBat的扫描路径

 mybatis.mapper-locations=classpath*:/mapper/**Mapper.xml

二、问题分析和解决方法

首先,给定的异常提示信息并不精准,有多个错误原因都会抛出该异常。mybatis出现这个问题,通常是由Mapper interface和对应的xml文件的定义对应不上引起的,这时就需要仔细检查对比包名、xml中的namespace、接口中的方法名称等是否对应。我之前就因为称忘记在xml标签的id属性中添加方法名或写错方法名而出现这个错误。

出现这个错误时,按以下步骤检查一般就会解决问题:
1:检查xml文件所在package名称是否和Mapper interface所在的包名一一对应;
2:检查xml的namespace是否和xml文件的package名称一一对应;
3:检查方法名称是否对应;
4:去除xml文件中的中文注释;
5:随意在xml文件中加一个空格或者空行然后保存。

我在项目中遇到的问题可以使用最后的解决方法解决:“随意在xml文件中加一个空格或者空行然后保存”,看起来这么怪异的解决方式,实际上是触发了IDE的自动编译功能。由于xml文件在编译的时候,不一定总能立即从源目录复制到class文件的编译目录(MyEclipse经常出这个问题),有时候你源目录中的xml文件已经修改好了,而class所在的目录里面还是旧的。因此真正确定有效的方式是将正确的xml文件复制到class输出目录。

发现了问题就要从根本上解决,而不应该当出现了问题再去解决。我最后发现Jenkins通过maven把项目打成war包,或者Eclipse通过使用maven命令tomcat7:deploy远程自动部署项目打成的war包,war包里面缺少Mapper对应的xml文件,也就是没有把xml文件打包进去。解决办法是,在pom.xml文件中的build标签中添加如下代码,显示的强制将xml文件打到war包中:

<resources> 
      <resource> 
	<directory>src/main/java</directory>
	 <includes>
		 <include>**/*.xml</include>
	 </includes>
	 <filtering>false</filtering>
      </resource>
 </resources>

关注我获取更多教程知识




猜你喜欢

转载自blog.csdn.net/cadn_jueying/article/details/80803192
今日推荐