java|解决错误(org.apache.ibatis.binding.BindingException)

项目场景: 在学习mybatis的代理开发的时候出现了此问题
问题描述 今天在学习mybatis的时候出现了错误:

Exception in thread "main" org.apache.ibatis.binding.BindingException: Type interface com.wxy.dao.UserMapper is not known to the MapperRegistry. at org.apache.ibatis.binding.MapperRegistry.getMapper(MapperRegistry.java:47) at org.apache.ibatis.session.Configuration.getMapper(Configuration.java:745) at org.apache.ibatis.session.defaults.DefaultSqlSession.getMapper(DefaultSqlSession.java:292) at com.wxy.service.ServiceDemo.main(ServiceDemo.java:31)

原因分析:
1. 我们得知道这句话的意思是你的Mapper接口,被Spring注入后,却无法正常的使用mapper.xml的sql;
2. 这里的Spring注入后的意思是,你的接口已经成功的被扫描到,但是当Spring尝试注入一个代理(MyBatista实现)的实现类后,却无法正常使用。这里的可能发生的情况有如下几种;
①接口已经被扫描到,但是代理对象没有找到,即使尝试注入,也是注入一个错误的对象(可能就是null)
②接口已经被扫描到,代理对象找到了,也注入到接口上了,但是调用某个具体方法时,却无法使用(可能别的方法是正常的)
解决方案: 如何解决?
1. 检查你的映射文件中的namespace是不是和接口文件的路径一致

比如你的接口的全限定名为com.dao,类名为UserDao,那么在你的映射文件中的namespace的参数应该为com.dao.UserDao
【注意:直接复制的路径是com/dao/UserDao.java这样是不可以的,只可以使用.进行连接】
2. 检查你的映射文件中的id是不是和接口中的方法名一致?

比如你的方法名为findAll(),那么你的映射文件中的id就需要是findAll
3. 检查你的接口的输出是不是和你的resultType一致?

比如你的resultType是user类,那么你的接口的输出【假设你的接口里面的方法为List findAll() ; 】即你这里的xxx需要是User

注意哈,我这里使用User是因为我已经在核心配置文件中进行重命名了的,所以你没有进行重命名的话,你的resultType就需要是包名+User,然后你的输出里面的xxx仍然是User就可以,不会有影响的哈
给个截图吧
①没有进行核心配置文件自定义别名
java|解决错误(org.apache.ibatis.binding.BindingException)
文章图片

java|解决错误(org.apache.ibatis.binding.BindingException)
文章图片

②自定义别名了
java|解决错误(org.apache.ibatis.binding.BindingException)
文章图片


java|解决错误(org.apache.ibatis.binding.BindingException)
文章图片

??????? 4. 检查你的接口的输入和你的paramType是不是一致?
【假设你的接口里面的方法为List findAll(xxx) ; 】,映射文件为paramType="int",那么你这里的xxx需要是int i【这个参数随意,只要参数类型是int就行】

希望对你有帮助!
【java|解决错误(org.apache.ibatis.binding.BindingException)】祝你早日找到工作!一起加油!

    推荐阅读