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

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

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

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

猜你喜欢

转载自blog.csdn.net/weixin_45497155/article/details/106627699