解决错误: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就可以,不会有影响的哈

给个截图吧

①没有进行核心配置文件自定义别名

解决错误:org.apache.ibatis.binding.BindingException_第1张图片

解决错误:org.apache.ibatis.binding.BindingException_第2张图片

②自定义别名了

解决错误:org.apache.ibatis.binding.BindingException_第3张图片

 

解决错误:org.apache.ibatis.binding.BindingException_第4张图片

 ​​​​​​​ 4. 检查你的接口的输入和你的paramType是不是一致?

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

希望对你有帮助!

祝你早日找到工作!一起加油!

你可能感兴趣的:(java,java,开发语言,mybatis)