码迷,mamicode.com
首页 > 数据库 > 详细

SqlSessionFactory的创建过程

时间:2016-07-04 20:23:52      阅读:340      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

首先是创建一个SqlSessionFactoryBuilder,由其名字可以看出是创建SqlSessionFactory的,跟进类中,发现它没有构造方法,只有各种重载的build方法,返回值都是SqlSessionFactory,

技术分享

看来为了创建SqlSessionFactory也是煞费苦心。。。

经过一次内部调用,来到这个build方法

技术分享

此时的参数只有最开始的输入字符流:Resources.getResourceAsReader(resource),另外两个参数:environment和properties均为空。

在这里,XMLConfigBuilder是一个解析XML配置的类,主要作用就是解析xml配置文件并初始化一些信息。

继续跟进XMLConfigBuilder的构造方法,发现首先是调用了重载的构造方法,并且有两个与XML解析相关的类:

技术分享

XMLMapperEntityResolver是一个实现了xml标准EntityResolver的实现类,略过

XPathParser继续解析,跟进其构造方法,目的之一是得到一个关联xml配置的Document对象

技术分享

执行commonConstructor,主要是初始化一些配置

技术分享

而下面的createDocument则产生了此Document对象,具体不赘述。

执行完毕之后,就调用了XMLConfigBuilder重载的构造方法:

技术分享

可以看出这里,首先是初始化了一个全局配置类:Configuration,该类是MyBatis的总配置类,使用的地方非常多,后面会再探讨。

初始化完毕之后,继续调用父类BaseBuilder的构造方法:

技术分享

主要是初始化了三个属性:配置类,类型别名注册类,类型处理注册类,并且可以看出后两个属性均是configuration的属性

简要看看TypeAliasRegistry:

技术分享

TypeHandlerRegistry:

技术分享

都和数据类型相关的配置类。

初始化完毕之后,就得到了XMLConfigBuilder对象,此时代码继续回到SqlSessionFactory的build方法,

下面接着调用XMLConfigBuilder对象的parse方法:技术分享

跟进如下:
首先是xml解析类解析方法parse():

在parse方法里面,就开始解析mybatis的配置文件:

首先是得到根节点<configuration>

技术分享

下面就是解析此节点,也即配置文件的内容:

查看parseConfiguration方法:

技术分享

得到的根节点XNode root具体值如下:

技术分享

此内容正是我的配置文件的内容。

同时在parseConfiguration方法里面也可以看到解析的顺序:properties,typeAliases,plugins,。。。。

这里查看一下mapper节点的解析:

跟进mapperElement方法:

技术分享

传入的mapper节点内容如下:

技术分享

解析时首先是遍历mappers节点,然后判断节点是否是package,如果是则获取其name属性并将其set到主配置类configuration的属性MapperRegistry mapperRegistry中

该属性主要是记录下dao接口和其匹配的xml配置文件,以至于后续可以由sqlSession产生dao接口对应的代理实现类。

由于这里只有mapper子节点,所以继续走,依次获取节点的resource,url,mapperClass属性,并且可以看到,三者属性只能存在一种。

这里获取到了resource节点:com/qc/dao/userDao-mapping.xml

接着初始化ErrorContext,记录错误的源头resource

然后由此resource得到对应的输入流,用于生成XMLMapperBuilder,该类的作用是解析每个dao接口对应xml,这里就是要解析com/qc/dao/userDao-mapping.xml

调用XMLMapperBuilder的构造方法,如下:

技术分享

它也是先生成XML解析类XPathParser,和之前解析Configuration一致,不赘述

生成完毕之后,调用重载构造方法:

技术分享

这里也是传入配置类,调用父类构造方法,初始化。

然后生成MapperBuilderAssistant对象,该对象在后续解析中也使用挺多。

注意XMLConfigBuilder,XMLMapperBuilder,MapperBuilderAssistant均是BaseBuilder的子类~!

得到XMLMapperBuilder对象之后,就开始解析dao对应的xml文件。

技术分享

这里先不赘述,后续再研读

配置文件都解析完毕之后,属性都已初始化完毕,配置都已经安装完毕,下面返回SqlSessionFactory的build方法:

技术分享

可以看到,这里生成的是DefaultSqlSessionFactory并返回~!

 

SqlSessionFactory的创建过程

标签:

原文地址:http://www.cnblogs.com/seguzhizi/p/5639492.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!