IDEA下 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

刚到新公司,简单熟悉了下这边的业务情况及项目。

经历了文档、测试环境、实际操作、负责人讲解。

最后还是想再次通过源码了解这个项目。

经过一列账户、授权、git、maven设置等。

最终卡在了启动时的一个异常。

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
org.apache.ibatis.binding.MapperMethod$SqlCommand.(MapperMethod.java:189)
org.apache.ibatis.binding.MapperMethod.(MapperMethod.java:43)
org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:58)
org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:51)
com.sun.proxy.$Proxy25.getBrand(Unknown Source)

经过同事统一环境换成了eclipse时,启动正常。

后来发现这是一个eclipse与idea差异的问题。

网上对此异常默认解决办法如下:

1:检查xml文件所在的package名称是否和interface对应的package名称一一对应
2:检查xml文件的namespace是否和xml文件的package名称一一对应
3:检查函数名称能否对应上
4:去掉xml文件中的中文注释
5:随意在xml文件中加一个空格或者空行然后保存(触发了ide的自动编译功能。由于xml文件在编译的时候,不一定总能立即从源目录复制到class文件的编译目录(MyEclipse经常出这个问题),有时候你源目录中的xml文件已经修改好了,而class所在的目录里面还是旧的。因此真正确定有效的方式是将正确的xml文件复制到class输出目录。)

经过各种尝试还是未能解决该问题。

后来发现这边的项目结构是maven分module的方式。而mybatis的xml文件在一个dao的模块中.以jar形式被引用.

在idea中发布编译时不对xml进行处理。故出现相关错误.

最终解决办法:

在dao的pom.xml中添加

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

问题搞定!

发表评论

电子邮件地址不会被公开。 必填项已用*标注