MyBatis源码分析篇---会话工厂SqlSessionFactory

1、源起
  • MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,简化我们的开发;
  • 所有的开源项目都会有自己的顶级域名,我们这里访问MyBatis的中文官网地址;
  • 中文官网地址
2、主要工作流程
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)
  • 首先我们需要用SqlSessionFactoryBuilderbuild方法去构建SqlSessionFactory,如下图:

  • build方法中,在new XMLConfigBuilder中初始化了Configuration,这是至为重要的一个类,之后MyBatis解析的所有配置信息都会存储在这个类中;

5.2 new Configuration
  • 现在我们可以看下在new Configuration的时候做了什么操作;

  • 我们可以从下面的代码截图中看出,其实,他只是做了部分别名的存储;

5.3 XMLConfigBuilder#parse
  • 当我们再SqlSessionFactoryBuilderbuild方法中获取到了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

至此:已经获取到了会话工厂类实例SqlSessionFactory ,我们可以从会话工厂中获取session会话,从而操作数据库

结语

​ 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的,我们获取到了会话工厂类,就相当于拿到了制作操作数据库钥匙的机器,而我们现在只需要拿着这个机器去制造钥匙,然后去打开MyBatis 操作数据库的大门。

公众号推荐

微信公众号:从demo到折腾源码
微信号:albert_ztym

从demo到手撕源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值