關於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注釋的作用混為一談了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM