白山市迈斯云门禁网络科技有限公司
首页 | 联系方式 | 加入收藏 | 设为首页 | 手机站

产品目录

联系方式

联系人:业务部
电话: 00158-898012
邮箱:service@taihuake1.com

当前位置:首页 >> 新闻中心 >> 正文

Springboot整合mybatis出现无法注入mapper接口的问题处理

摘要:Springboot整合mybatis出现无法注入mapper接口的问题处理
异常描述:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):com.sf.dao.UserMapper.selectByPrimaryKey


起初怀疑是在整合mybatis时的配置有错误,反复修改和测试发现配置都没问题。最后检查mapper.xml文件才发现namespace的定义路径名字与mapper接口的路径与名字不一致。
本人是通过Mybatis Generator自动生成的代码文件。通过这个异常才发现里边这个坑,mapper的xml文件和接口文件如果你想放在同一个包下边,那么使用Mybatis Generator自动生成的代码文件是完全没问题的,但是如果你想把mapper接口和xml文件分开放置,就需要注意生成后的mapper namespace路径会是你配置的sqlMapGeneratortargetPackage="mybatis.mapper"的路径,然后上边的异常就在你使用mapper接口时出现了。


解决办法就是将生成后的mapper.xml文件中的namespace与你的mapper接口路径比对一下,不同就改为mapper接口的路径。
原理:在mybatis中,映射文件中的namespace是用于绑定mapper接口的,即面向接口编程。 当你的namespace绑定接口后,你可以不用写接口实现类,mybatis会通过该绑定自动帮你找到对应需要执行的SQL语句。Spring在动态代理时,就是需要一个mapper接口的一个实现类,所以当你的mapper.xml与mapper接口类未关联到一块的时候,就会出现上述异常。


总结:
出现上边的类似异常,首先确定配置的资源路径(mapper接口扫描路径,mapper.xml资源路径)是否正确,然后就是排查mapper.xml文件中是否有错误。