关于SpringBoot集成myBatis时,mapper接口注入失败的问题

Posted insaneXs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于SpringBoot集成myBatis时,mapper接口注入失败的问题相关的知识,希望对你有一定的参考价值。

 

 

问题描述:

 在Spring Boot集成myBatis时,发现启动时,mapper接口一直注入失败。

现象如下:

VehicleDAO就是需要的mapper对象,一个简单的接口。

已经在application.properties中配置了mybatis.config-location=classpath:mybatis-config.xml。

mybatis-config.xml中指定了对应的mapper所在的包,配置如下:

 

想了很久都不明白为什么mybatis-config指定了mappers所在的包,依旧无法加载对应的mnapper。

但是直接给接口上添加@Mapper注释或是在SpringBoot入口处,增加@MapperScan指定要扫描的包就能正常启动。

 

想不明白,就调试。为了方便获取信息,在程序中注入实现了BeanFactoryAware的类。然后通过beanfactory,我们去获取对应的bean。

发现直接获取对应的mapper时,确实不存在对应的bean。

但是获取sqlsession后,在从sqlsession中查找对应的mapper时,发现已经存在对应的mapper代理。

 

这才想起来,mybatis-config中只是会为对应的mapper创建代理类,而想真正包装成bean,注入到spring容器中,还是需要靠AutoConfiguredMapperScannerRegistrar,它会根据扫描@Mapper注释或是@MapperScan指定的包下的接口,将其注册为bean。

之前的问题是我想当然的将mybatis-config中mappers的配置和@Mapper注释的作用混为一谈了!

以上是关于关于SpringBoot集成myBatis时,mapper接口注入失败的问题的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot集成mybatis框架

企业分布式微服务云SpringCloud SpringBoot mybatis (三十四)关于集成 Spring Cache

企业分布式微服务云SpringCloud SpringBoot mybatis (三十)关于spring boot集成apidoc

Springboot集成mybatis时批量插入

springboot微服务之集成mybatis和mysql整合完整详细版

SpringBoot使用·下篇(SpringBoot集成MyBatis+日志打印+MyBatis-plus)