项目场景: 在学习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类,那么你的接口的输出【假设你的接口里面的方法为ListfindAll() ; 】即你这里的xxx需要是User
注意哈,我这里使用User是因为我已经在核心配置文件中进行重命名了的,所以你没有进行重命名的话,你的resultType就需要是包名+User,然后你的输出里面的xxx仍然是User就可以,不会有影响的哈
①没有进行核心配置文件自定义别名
文章图片
文章图片
②自定义别名了
文章图片
文章图片
??????? 4. 检查你的接口的输入和你的paramType是不是一致?
【假设你的接口里面的方法为ListfindAll(xxx) ; 】,映射文件为paramType="int",那么你这里的xxx需要是int i【这个参数随意,只要参数类型是int就行】
希望对你有帮助!
【java|解决错误(org.apache.ibatis.binding.BindingException)】祝你早日找到工作!一起加油!
推荐阅读
- 力扣|力扣打卡之最小栈
- vue|vue: 解决错误 RunScriptError: post install error, please remove node_modules before retry!
- java|解决错误(Cannot find module ‘fs/promises‘)
- java|出现错误java:警告:源反行版 9,需要目标发行版1.9
- java|解决实例化Servlet类[com.mu.servlet.HelloServlet]异常
- Spring|解决错误(Cannot resolve method ‘getConnection‘ in ‘DataSource‘)
- 1.3 万亿条数据查询,如何做到毫秒级响应()
- MySQL数据库|MySQL数据库四(MySQL数据库)
- MySQL数据库|MySQL数据库一(MySQL体系结构与存储引擎)