1、源起
MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,简化我们的开发;- 所有的开源项目都会有自己的顶级域名,我们这里访问
MyBatis的中文官网地址; - 中文官网地址
2、主要工作流程
- 初始化解析配置文件
- 创建会话工厂类
SqlSessionFactory - 创建会话
SqlSession - 使用会话操作数据库
3、 解析配置文件,参考下篇博文
4、创建会话工厂类SqlSessionFactory
-
每个基于
MyBatis的应用都是以一个SqlSessionFactory的实例为核心的。SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder获得。而SqlSessionFactoryBuilder则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出SqlSessionFactory实例。 -
String resource = "mybatis-config.xml";//全局配置文件路径 InputStream inputStream = Resources.getResourceAsStream(resource);//读取xml文件 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//构建会话工厂类 -
基于以上代码我们查看分析源码
5、源码分析(以下源码基于mybatis-3.5.4)
5.1 SqlSessionFactoryBuilder#build(InputStream)
- 首先我们需要用
SqlSessionFactoryBuilder的build方法去构建SqlSessionFactory,如下图: build方法中,在new XMLConfigBuilder中初始化了Configuration,这是至为重要的一个类,之后MyBatis解析的所有配置信息都会存储在这个类中;
5.2 new Configuration
- 现在我们可以看下在
new Configuration的时候做了什么操作; - 我们可以从下面的代码截图中看出,其实,他只是做了部分别名的存储;
5.3 XMLConfigBuilder#parse
- 当我们再
SqlSessionFactoryBuilder的build方法中获取到了XMLConfigBuilder之后,调用了其parse()方法; - 而我们看到
parse()方法中调用了parseConfiguration(XNode root)这个方法才是真正执行mybatis全局配置文件解析的方法。 - 在
parseConfiguration(XNode root)方法中解析了<properties>、配置节点<settings>、别名配置节点<typeAliases>、插件扩展<plugins>、对象工厂节点<objectFactory>、环境配置节点<environments>、类型处理器节点<typeHandlers>、映射器节点<mappers>等; parse()执行配置文件解析后将配置信息保存至Configuration对象中。- 其中相对而言最需要我们关注的是:
org.apache.ibatis.builder.xml.XMLConfigBuilder#mapperElement方法,初始化了MappedStatement对象,其中保存了映射文件等SQL执行所需的必要信息;可参考上一篇博文:初始化解析配置文件 - 代码运行时序图
至此:已经获取到了会话工厂类实例SqlSessionFactory ,我们可以从会话工厂中获取session会话,从而操作数据库
结语
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的,我们获取到了会话工厂类,就相当于拿到了制作操作数据库钥匙的机器,而我们现在只需要拿着这个机器去制造钥匙,然后去打开MyBatis 操作数据库的大门。