大家好,今天和大家一起来研究一下MyBatis的源码。文章不会太深入,只会把整个主脉络进行梳理。细节实现还是需要大家和XiXi自己去读。
入门代码
忘记在哪里听到过:读框架源码要从框架的HelloWorld代码入手。 下面我们就先写一段HelloWorld代码
-
mybatis-config.xml-MyBatis全局配置文件

-
启动类代码

-
UserMapper.xml和UserMapper接口
这里不贴了,一个简单的通过id查询语句
SqlSessionFactoryBuilder
考点:MyBatis框架中使用了哪些设计模式?
SqlSessionFactoryBuilder
使用了建造者模式,作用是构造SqlSessionFactory
下面我们来进入SqlSessionFactoryBuilder#build(InputStream inputStream)
方法
上述方法又调用
SqlSessionFactoryBuilder#build(InputStream inputStream, String environment, Properties properties)
,我们来看下具体实现

上述方法主要逻辑:
通过 XMLConfigBuilder
解析全局配置文件流为Configuration
并将其作为参数传递。调用 SqlSessionFactoryBuilder#build(Configuration config)
方法,利用Configuration
创建一个DefaultSqlSessionFactory

DefaultSqlSessionFactory
就是简单的属性赋值就结束了
好的,SqlSessionFactory
的创建流程已经说完了,下面整理一下代码流程。
全局配置文件以字节流传入

全局配置文件以字符流传入

小结
SqlSessionFactory
通过建造者模式进行创建全局配置文件最终会解析成 Configuration
对象
XMLConfigBuilder
XMLConfigBuilder
的作用就是解析MyBatis全局配置文件为Configuration
对象。
XMLConfigBuilder的构造方法

上图展示了一套调用链
全局配置文件流最终给到了 XPathParser
newConfig
方法创建了Configuration
对象,使用了反射

XMLConfigBuilder的parse()
方法

parse()方法很容易看懂,我来说几个点
XPathParser
接收了全局配置文件的文件流,可以解析到配置文件内容parseConfiguration
这个方法里就是针对全局配置文件的每个标签进行解析,如:environments
、mappers
、settings
等等标签解析后都会被塞到 Configuration
对象中(大家可以自行点进某个标签解析逻辑去看)

总结
好了兄弟们,关于SqlSessionFactory
的创建源码,XiXi就暂时给大家说到这里,比较浅显,主要给大家透露了两个信息
-
全局配置文件最终就是形成一个 Configuration
(其实我们完全可以抛弃XML文件,直接使用Java代码的方式完成Configuration
创建) -
我们如果想搞清楚具体某个配置标签的解析,可以去 XMLConfigBuilder#parseConfiguration
这个方法选择性阅读
原文始发于微信公众号(溪溪技术笔记):MyBatis源码阅读-SqlSessionFactory的创建
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/249168.html