Spring整合Mybatis报错: Invalid bound statement (not found): 亲测有效
mybatis报错: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found), 经过在网上半天的搜索, 找到好几种解决办法, 从字面意思上来看明显就是绑定异常, 其实就是xml与mapper接口绑定失败导致的异常, 所以网上说了如下几种办法:
- mapper.xml中的namespace和实际的mapper文件不一致
- mapper接口中的方法名和mapper.xml中的id标签不一致
- Mapper.xml没有构建到target中
- 配置文件导不出来, maven的配置文件默认放在resources目录下,实际上把它放到了java目录下,导致配置文件导不出来
- spring配置文件写错
然而这五种情况我都没有发生, 却仍然报错Invalid bound statement (not found), 如果大家跟我一样上述五种情况都未发生, 但是仍然报了这个错误, 请继续往下看!
那就请大家来看第六种情况吧!
如下图为我当时的报错信息
经过排查发现很明显我的xml跟mapper接口是能绑定起来的, MybatisX插件也很好的证明了这一点
搞了俩小时, 突然想起来曾经的前辈跟我说过mapper.xml文件最好与mapper接口同目录, 这样生成的target文件中, mapper接口与xml文件会在同一个包中, 由于大家正常开发都是把mapper.xml文件直接放到resource/mapper下, 所以当时老师说过我也没有特别注意, 今天终于吃了亏, 日后也请大家注意这个问题, 尽量让自己的结构保持绝对的清晰正确, 请看修改后的包结构, 如下截图
修改resource目录, 将xml文件目录修改为跟mapper接口的文件目录一模一样
修改完成后maven重新install, 发现mapper接口与xml文件被打到一个文件夹下
重新运行, 问题解决, 下课!