欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mybatis核心源码分析之加载XML文件(二)

程序员文章站 2022-05-19 16:09:15
...

上一篇分析了Mapper初始化的核心源码,本篇主要分析一下SpringBoot如何加载Mapper.xml文件。
如果在你的SpringBoot项目里引入的是下面的包:

		<dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>

那你的项目采用的是自动化配置,本文也是基于自动化配置来介绍的。属性文件是MybatisProperties,里面的属性对应的就是application.properties里的配置项。核心配置类是MybatisAutoConfiguration,在这里会去构造SqlSessionFactory:
Mybatis核心源码分析之加载XML文件(二)
上面设置拦截器、包别名、资源路径等的代码就不看了,主要看factory.getObject()这个方法,这里会去解析xml文件。
在SqlSessionFactoryBean里会调用buildSqlSessionFactory()方法
Mybatis核心源码分析之加载XML文件(二)
mapperLocations是根据application.properties里配置的xml路劲加载的文件资源。下面new了一个XMLMapperBuilder,xmlMapperBuilder.parse()方法里解析xml文件:
Mybatis核心源码分析之加载XML文件(二)
首先是解析xml节点,
Mybatis核心源码分析之加载XML文件(二)
在statementParser.parseStatementNode()里生成mappedStatement,column、property、resultMap等会解析成一个个对象。
Mybatis核心源码分析之加载XML文件(二)
Mybatis核心源码分析之加载XML文件(二)
mappedStatement会添加到configuration的mappedStatements里。
Mybatis核心源码分析之加载XML文件(二)
在bindMapperForNamespace()方法里绑定Mapper接口:
Mybatis核心源码分析之加载XML文件(二)
最终会调用MapperRegistry.addMapper()方法将Mapper接口构造成MapperProxyFactory放入knownMappers,为Mapper创建动态代理的时候会从knownMappers取出MapperProxyFactory,MapperProxyFactory的newInstance()方法用来创建动态代理。
Mybatis核心源码分析之加载XML文件(二)

相关标签: 源码剖析