Spring 与 Mybatis 整合出现org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)错误

错误描述

问题描述:学习 Spring 和 Mybatis 进行整合时,出现 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): ...
开发工具:IDEA

解决方案

出现上述问题,一般原因是 xm l 映射文件有错误,也就是说 Mapper interface 和 其相关的 xml 文件的定义对应不上。
我们按以下步骤一一执行,尝试解决:

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

但是我按照上述方式并没有解决问题,表示很奇怪,经过上网查询,直至看到 IDEA异常解决: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) ,问题才得以解决,在这里向该博主表示感谢!

查看了发布之后的源代码之后,发现 *Mapper.xml 文件并没有发布到目标文件中


编译失败 target

错误原因终于找到了,就是 xml 文件在发布时不会编译,同时也不会发布到 target 中,导致项目运行时找不到 mapper.xml 文件。

解决方案
第一步:将 *Mapper.xml 文件提取到指定文件夹 mapper 中,设置 mapper 文件夹类型为 resource

项目目录

第二步:在 spring-mybatis.xml 配置文件中添加红色框中的代码对 mapper 文件进行扫描.


配置文件

第三步:重新编译执行,问题解决,target 文件夹下面出现 *Mapper.xml 文件


编译成功 target g

总结

eclipse 和 myeclipse 中 mapper.java 和 mapper.xml 在同一目录下,直接配置扫描不会出现上述问题,但是使用编辑器 IDEA 会出现该问题,需要将 mapper.xml 文件指定为 resources 。

推荐阅读更多精彩内容