【mybatis】springboot加載mapper.xml文件的方式

1.第一種方式: 加載mapperLocations指定路徑下的xml

如果配置了mybatis.mapperLocations,那么會(huì)加載該屬性配置的包下的xml。

mybatis.mapper-locations=classpath:mapper/*.xml

那么 這個(gè)配置就會(huì)被裝載到 MybatisProperties這個(gè)類里

image

然后mybatis -springboot啟動(dòng)器 會(huì)通過spi 注冊(cè)這個(gè)類MybatisAutoConfiguration,這個(gè)類里 有@EnableConfigurationProperties(MybatisProperties.class)注解,注冊(cè)MybatisProperties類 去加載對(duì)應(yīng)的配置信息,然后通過構(gòu)造方法 的 參數(shù)注入,注入MybatisProperties對(duì)象,賦值給成員變量properties

image

MybatisAutoConfiguration 類還會(huì)用 @Bean 注冊(cè) SqlSessionFactory。并調(diào)用 MybatisProperties 類里的resolveMapperLocations(),將mapperLocations配置的路徑 下的xml文件 解析成resource對(duì)象, 放到 SqlSessionFactory 里。

image

調(diào)用SqlSessionFactoryBean 的getObject方法 new出sqlSessionFactory 對(duì)象

image
image

buildSqlSessionFactory()會(huì) new出XMLMapperBuilder,解析mapper.xml的resource對(duì)象集合,加載到Configuration對(duì)象里

image

最后返回出去持有 Configuration對(duì)象的DefaultSqlSessionFactory 對(duì)象,注冊(cè)到Spring容器中

image

2.第二種方式 : 加載與Mapper接口同包同名的xml.

在每個(gè)Mapper接口類 的代理對(duì)象 依賴注入后,會(huì)按照 Mapper接口的全限定性名(沒有java后綴) + xml后綴來加載xml文件。

意思就是 加載了 a.b.UserMapper.java 就會(huì)去 加載 a.b.UserMapper.xml

MapperFactoryBean 父類 DaoSupport 實(shí)現(xiàn)的 afterPropertiesSet()方法中 會(huì)調(diào)用MapperFactoryBean 重寫過后的checkDaoConfig()方法 ,

afterPropertiesSet()會(huì)在bean 屬性的依賴注入后 被spring調(diào)用

image
        添加Mapper接口到Configuration中
image
image
image

加載xml資源

image

最終是 根據(jù)class的name ,+.xml 去加載xml文件資源,如果能獲取到流,就說明存在,就去調(diào)mybatis里解析xml的解析器去解析xml文件。

image

3.結(jié)論

其實(shí)兩種方式是可以共存的,并不沖突。

在springboot中,

  • 如果配置了mybatis.mapperLocations,那么會(huì)加載該屬性配置的包下的xml。 并且還會(huì)加載與Mapper接口同包同名的xml.

  • 如果沒配置mybatis.mapperLocations,只會(huì)加載與Mapper接口同包同名的xml.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容