MyBatis源码阅读-SqlSessionFactory的创建

大家好,今天和大家一起来研究一下Mybatis的源码。文章不会太深入,只会把整个主脉络进行梳理。细节实现还是需要大家和XiXi自己去读。

入门代码

忘记在哪里听到过:读框架源码要从框架的HelloWorld代码入手。 下面我们就先写一段HelloWorld代码

  1. mybatis-config.xml-MyBatis全局配置文件
MyBatis源码阅读-SqlSessionFactory的创建
image.png
  1. 启动类代码
MyBatis源码阅读-SqlSessionFactory的创建
image.png
  1. UserMapper.xml和UserMapper接口

这里不贴了,一个简单的通过id查询语句

SqlSessionFactoryBuilder

考点:mybatis框架中使用了哪些设计模式SqlSessionFactoryBuilder使用了建造者模式,作用是构造SqlSessionFactory

下面我们来进入SqlSessionFactoryBuilder#build(InputStream inputStream)方法MyBatis源码阅读-SqlSessionFactory的创建

上述方法又调用SqlSessionFactoryBuilder#build(InputStream inputStream, String environment, Properties properties),我们来看下具体实现

MyBatis源码阅读-SqlSessionFactory的创建
image.png

上述方法主要逻辑:

  • 通过XMLConfigBuilder解析全局配置文件流为Configuration并将其作为参数传递。
  • 调用SqlSessionFactoryBuilder#build(Configuration config)方法,利用Configuration创建一个DefaultSqlSessionFactory
MyBatis源码阅读-SqlSessionFactory的创建
image.png

DefaultSqlSessionFactory就是简单的属性赋值就结束了

好的,SqlSessionFactory的创建流程已经说完了,下面整理一下代码流程。

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

MyBatis源码阅读-SqlSessionFactory的创建
image.png

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

MyBatis源码阅读-SqlSessionFactory的创建
image.png

小结

  1. SqlSessionFactory通过建造者模式进行创建
  2. 全局配置文件最终会解析成Configuration对象

XMLConfigBuilder

XMLConfigBuilder的作用就是解析MyBatis全局配置文件为Configuration对象。

XMLConfigBuilder的构造方法

MyBatis源码阅读-SqlSessionFactory的创建
image.png

上图展示了一套调用链

  • 全局配置文件流最终给到了XPathParser
  • newConfig方法创建了Configuration对象,使用了反射
MyBatis源码阅读-SqlSessionFactory的创建
image.png

XMLConfigBuilder的parse()方法

MyBatis源码阅读-SqlSessionFactory的创建
image.png

parse()方法很容易看懂,我来说几个点

  • XPathParser接收了全局配置文件的文件流,可以解析到配置文件内容
  • parseConfiguration这个方法里就是针对全局配置文件的每个标签进行解析,如:environmentsmapperssettings等等
  • 标签解析后都会被塞到Configuration对象中(大家可以自行点进某个标签解析逻辑去看)
MyBatis源码阅读-SqlSessionFactory的创建
image.png

总结

好了兄弟们,关于SqlSessionFactory的创建源码,XiXi就暂时给大家说到这里,比较浅显,主要给大家透露了两个信息

  • 全局配置文件最终就是形成一个Configuration(其实我们完全可以抛弃XML文件,直接使用Java代码的方式完成Configuration创建)
  • 我们如果想搞清楚具体某个配置标签的解析,可以去XMLConfigBuilder#parseConfiguration这个方法选择性阅读


原文始发于微信公众号(溪溪技术笔记):MyBatis源码阅读-SqlSessionFactory的创建

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/249168.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!