問題描述:
在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注釋的作用混為一談了!