MyBatis 构建 SqlSessionFactory 过程

看了《深入浅出 MyBatis 技术原理和实战》一书中构建 SqlSessionFactory 这一节,感觉书上的条理对我来说不太清晰,在此我按照自己的思路将其理清。

SqlSessionFactory 是 MaBatis 的核心类之一,其最重要的功能就是创建 MyBatis 的核心接口 SqlSession,因此我们需要先创建 SqlSessionFactory 。

构建过程

一、读取配置文件,创建 Configuration 单例

在 SqlSessionFactory 构建过程中,首先需要用到一个 Configuration 对象。事实上,在 SqlSessionFactory 的构建过程中, Configuration 是最重要的,它读取配置文件并保存为一个单例。它有如下的作用:

  • 读取配置文件,包括基础配置的XML和映射器XML。
  • 初始化基础配置,如 MyBatis 的别名以及一些重要的类对象(如插件、映射器、ObjectFactory 和 typeHandler 对象。
  • 提供单例,为后续创建 SessionFactory 提供服务并提供配置参数。
  • 执行一些重要的对象方法,初始化配置信息

Configuration 是通过 XMLConfigBuilder 构建的。首先, MyBatis 会读取所有的 XML 配置的信息,然后将这些信息保存到 Configuration 的单例实例中,并初始化以下内容:

  • properties 全局参数
  • settings 设置
  • tpyeAliases 别名
  • ObjectFactory 类型处理器
  • plugin 插件
  • environment 环境
  • DatabaseIdProvider 数据库标识
  • Mapper 映射器

这一步完成后,就可以构建 SqlSessionFactory 了。

二、 使用 Configuration 构建 SqlSessionFactory

有了 Configuration 对象构建 SqlSessionFactory 就很简单了,我们只要写很简单的代码:

SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

MyBatis 会根据 Configuration 的配置读取配置的信息,构建 SqlSessionFactory 的实现。SqlSessionFactory 是一个接口,其默认的实现类是org.apache.ibatis.session.defaults.DefaultSqlSessionFactory,一般情况下我们都没有必要自己创建新的 SqlSessionFactory 实现类。

总结

在 MyBatis 中使用 SqlSessionFactoryBuilder ,采用Builder模式来构建它,构建主要分两步:

  1. 通过 org.apache.ibatis.builder.xml.XMLConfigBuilder 解析 XML 配置文件,将读取的配置信息存入 org.apache.ibatis.session.Configration 类中, MyBatis 几乎所有的配置都是存在这里的。
  2. 使用 Configuration 对象创建 SqlSessionFactory 。SqlSessionFactory 是一个接口,其默认的实现类是org.apache.ibatis.session.defaults.DefaultSqlSessionFactory。一般情况下我们都没有必要自己创建新的 SqlSessionFactory 实现类。

创建 SqlSessionFactory 的方式是一种 Builder 模式。对于复杂的对象而言,直接使用构造方法构建是有困难的,会导致大量的逻辑放在构造方法中。由于对象的复杂性,我们更希望能在构建的时候一步步有秩序地来构建它,从而降低复杂性。在这里,MyBatis 使用一个参数类 Configuration 总领全局,然后分步构建,使得复杂的对象 SqlSessionFactory 被构建出来。这种方式值得我们在工作中学习和使用。

参考文献
[1] 杨开振. 深入浅出 MyBatis 技术原理和实战[Z]. 北京: 电子工业出版社,2016.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值