项目场景:
在学习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)
原因分析:
我们得知道这句话的意思是你的Mapper接口,被Spring注入后,却无法正常的使用mapper.xml的sql;
这里的Spring注入后的意思是,你的接口已经成功的被扫描到,但是当Spring尝试注入一个代理(MyBatista实现)的实现类后,却无法正常使用。这里的可能发生的情况有如下几种;
①接口已经被扫描到,但是代理对象没有找到,即使尝试注入,也是注入一个错误的对象(可能就是null)
②接口已经被扫描到,代理对象找到了,也注入到接口上了,但是调用某个具体方法时,却无法使用(可能别的方法是正常的)
解决方案:
如何解决?
1. 检查你的映射文件中的namespace是不是和接口文件的路径一致
比如你的接口的全限定名为com.dao,类名为UserDao,那么在你的映射文件中的namespace的参数应该为com.dao.UserDao
【注意:直接复制的路径是com/dao/UserDao.java 这样是不可以的,只可以使用.进行连接】
- 检查你的映射文件中的id是不是和接口中的方法名一致?
比如你的方法名为findAll(),那么你的映射文件中的id就需要是findAll
- 检查你的接口的输出是不是和你的resultType一致?
比如你的resultType是user类,那么你的接口的输出【假设你的接口里面的方法为List<xxx> findAll() ;】即你这里的xxx需要是User
注意哈,我这里使用User是因为我已经在核心配置文件中进行重命名了的,所以你没有进行重命名的话,你的resultType就需要是包名+User,然后你的输出里面的xxx仍然是User就可以,不会有影响的哈
给个截图吧
①没有进行核心配置文件自定义别名
②自定义别名了
4. 检查你的接口的输入和你的paramType是不是一致?
【假设你的接口里面的方法为List<User> findAll(xxx) ;】,映射文件为paramType="int",那么你这里的xxx需要是int i【这个参数随意,只要参数类型是int就行】
希望对你有帮助!
祝你早日找到工作!一起加油!
版权归原作者 young_man2 所有, 如有侵权,请联系我们删除。