SpringBoot项目下的mapper接口代理类无法注入Spring容器的Bug

话不多说,看代码
首先是遇到的Bug:

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.kk.service.DeptService.get1] with root cause
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.kk.service.DeptService.get1

1.寻常配置却访问异常?
首先看到Invalid bound statement (not found):我以为的mapper.xml的映射文件找不到没有加载到target目录中,于是修改了maven的一些配置,重跑项目,发现映射文件已经有了,但是访问页面仍然还是这个错误。

2.映射文件已存在? Sql语句没问题
排除了映射文件的不存在,我开始想是不是映射文件与中select语句的结果不匹配,无法映射到实体类中,但是看了又改了半天,发现自己并没有错,只不过是resultMap与实体类和数据库字段的对应,又排除这一问题。

3.又见警告
我开始一点一点的查找,发现一个少见警告:
Could not autowire. No beans of ‘DeptMapper’ type found.
Inspection info:Checks autowiring problems in a bean class.

起初没太注意,但是越看越不对劲,Bean没有被注册?
于是我开始一步一步的排查,从controller层到service层再到dao层,发现controller层可以拿到service层的实现类,但是方法调用进入到service层之后,报错就出来了,这正好也是之前警告在的位置,显而易见,service层通过Autowire获取mapper时出错了,难道是mapper没有注册到Spring中?但是我加了@Mapper注解了啊。

4.原因所在
终于,又经过一系列的测试,发现@Mapper的确将我们写的接口成功注入到了Spring容器中,但是service层通过Autowire获取的是mapper的实现类,而实现类是Mybatis通过动态代理动态生成的,而问题的关键就在于动态代理类并没有注入到Spring中,所以service层拿不到,而我们需要加上@MapperScan(“com.xx.mapper”)注解,此注解是在Mybatis包下的,他是Mybatis的扫描包,现在只需要把@MapperScan加到SpringBoot的启动类上或者其他Spring能扫描到的包下面即可,作用就是让Spring去扫描Mybatis动态代理类加载到容器中,大功告成,发量-999。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"Could not autowire. No beans of 'DeptMapper' type found."这个错误表示在自动装配时找不到型为'DeptMapper'的bean。 出现这个错误可能有几个原因。首先,可能是没有Spring的配置文件正确注册'DeptMapper'型的bean。你可以检查一下配置文件,确保正确地配置了'DeptMapper' bean。 另外,这个错误也可能是由于mapper接口没有正确使用@Mapper注解导致的。请确认你的'mapper'接口上是否已经添加了@Mapper注解。 此外,还有可能是mapper.xml文件没有正确加载到项目的目标目录。你可以检查一下项目的maven配置和映射文件是否正确配置,并且重新运行项目。 综上所述,如果出现"Could not autowire. No beans of 'DeptMapper' type found."错误,你可以检查以下几个方面:1. 确保正确注册了'DeptMapper'型的bean;2. 确认'mapper'接口上已经添加了@Mapper注解;3. 检查maven配置和映射文件是否正确。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Could not autowire. No beans of ‘xxxMapper‘ type found.](https://blog.csdn.net/qq_19309473/article/details/123605602)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [SpringBoot项目下的mapper接口代理无法注入Spring容器Bug](https://blog.csdn.net/weixin_45943597/article/details/117754898)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值