经验分享,解决错误:org.apache.ibatis.binding.BindingException

发布时间 2023-05-04 15:55:47作者: 写不完的代码啊

问题描述 :今天在学习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<xxx> findAll() ;】即你这里的xxx需要是User 注意哈,我这里使用User是因为我已经在核心配置文件中进行重命名了的,所以你没有进行重命名的话,你的resultType就需要是包名+User,然后你的输出里面的xxx仍然是User就可以,不会有影响的.