1.第一種方式: 加載mapperLocations指定路徑下的xml
如果配置了mybatis.mapperLocations总放,那么會加載該屬性配置的包下的xml桩盲。
mybatis.mapper-locations=classpath:mapper/*.xml
那么 這個配置就會被裝載到 MybatisProperties這個類里
然后mybatis -springboot啟動器 會通過spi 注冊這個類MybatisAutoConfiguration,這個類里 有@EnableConfigurationProperties(MybatisProperties.class)注解,注冊MybatisProperties類 去加載對應的配置信息珠月,然后通過構造方法 的 參數(shù)注入,注入MybatisProperties對象楔敌,賦值給成員變量properties
MybatisAutoConfiguration 類還會用 @Bean 注冊 SqlSessionFactory啤挎。并調用 MybatisProperties 類里的resolveMapperLocations(),將mapperLocations配置的路徑 下的xml文件 解析成resource對象, 放到 SqlSessionFactory 里。
調用SqlSessionFactoryBean 的getObject方法 new出sqlSessionFactory 對象
buildSqlSessionFactory()會 new出XMLMapperBuilder梁丘,解析mapper.xml的resource對象集合侵浸,加載到Configuration對象里
最后返回出去持有 Configuration對象的DefaultSqlSessionFactory 對象,注冊到Spring容器中
2.第二種方式 : 加載與Mapper接口同包同名的xml.
在每個Mapper接口類 的代理對象 依賴注入后氛谜,會按照 Mapper接口的全限定性名(沒有java后綴) + xml后綴來加載xml文件。
意思就是 加載了 a.b.UserMapper.java 就會去 加載 a.b.UserMapper.xml
MapperFactoryBean 父類 DaoSupport 實現(xiàn)的 afterPropertiesSet()方法中 會調用MapperFactoryBean 重寫過后的checkDaoConfig()方法 区端,
afterPropertiesSet()會在bean 屬性的依賴注入后 被spring調用
添加Mapper接口到Configuration中
加載xml資源
最終是 根據(jù)class的name 值漫,+.xml 去加載xml文件資源,如果能獲取到流织盼,就說明存在杨何,就去調mybatis里解析xml的解析器去解析xml文件。
3.結論
其實兩種方式是可以共存的,并不沖突沥邻。
在springboot中危虱,
如果配置了mybatis.mapperLocations,那么會加載該屬性配置的包下的xml唐全。 并且還會加載與Mapper接口同包同名的xml.
如果沒配置mybatis.mapperLocations埃跷,只會加載與Mapper接口同包同名的xml.