美文网首页Java
【mybatis】springboot加载mapper.xml文

【mybatis】springboot加载mapper.xml文

作者: 天还下着毛毛雨 | 来源:发表于2022-11-20 18:37 被阅读0次

    1.第一种方式: 加载mapperLocations指定路径下的xml

    如果配置了mybatis.mapperLocations,那么会加载该属性配置的包下的xml。

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

    那么 这个配置就会被装载到 MybatisProperties这个类里

    image

    然后mybatis -springboot启动器 会通过spi 注册这个类MybatisAutoConfiguration,这个类里 有@EnableConfigurationProperties(MybatisProperties.class)注解,注册MybatisProperties类 去加载对应的配置信息,然后通过构造方法 的 参数注入,注入MybatisProperties对象,赋值给成员变量properties

    image

    MybatisAutoConfiguration 类还会用 @Bean 注册 SqlSessionFactory。并调用 MybatisProperties 类里的resolveMapperLocations(),将mapperLocations配置的路径 下的xml文件 解析成resource对象, 放到 SqlSessionFactory 里。

    image

    调用SqlSessionFactoryBean 的getObject方法 new出sqlSessionFactory 对象

    image image

    buildSqlSessionFactory()会 new出XMLMapperBuilder,解析mapper.xml的resource对象集合,加载到Configuration对象里

    image

    最后返回出去持有 Configuration对象的DefaultSqlSessionFactory 对象,注册到Spring容器中

    image

    2.第二种方式 : 加载与Mapper接口同包同名的xml.

    在每个Mapper接口类 的代理对象 依赖注入后,会按照 Mapper接口的全限定性名(没有java后缀) + xml后缀来加载xml文件。

    意思就是 加载了 a.b.UserMapper.java 就会去 加载 a.b.UserMapper.xml

    MapperFactoryBean 父类 DaoSupport 实现的 afterPropertiesSet()方法中 会调用MapperFactoryBean 重写过后的checkDaoConfig()方法 ,

    afterPropertiesSet()会在bean 属性的依赖注入后 被spring调用

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

    加载xml资源

    image

    最终是 根据class的name ,+.xml 去加载xml文件资源,如果能获取到流,就说明存在,就去调mybatis里解析xml的解析器去解析xml文件。

    image

    3.结论

    其实两种方式是可以共存的,并不冲突。

    在springboot中,

    • 如果配置了mybatis.mapperLocations,那么会加载该属性配置的包下的xml。 并且还会加载与Mapper接口同包同名的xml.

    • 如果没配置mybatis.mapperLocations,只会加载与Mapper接口同包同名的xml.

    相关文章

      网友评论

        本文标题:【mybatis】springboot加载mapper.xml文

        本文链接:https://www.haomeiwen.com/subject/qmobxdtx.html