关于 mybatis 的一些小玩意系列-入门篇之配置入口 SqlSessionFactoryBuilder

1.序言

从官网的入门篇,我们可以了解到,mybatis 的核心接口是SqlSessionFactory,然而在使用它之前,我们还需要做一些额外的配置和初始工作。这个工作的负责人就是如题的SqlSessionFactoryBuilder。所以,今天的主题会有两个,接下来系列中都会沿用这种套路。

  • 设计模式
  • 源码分析
2.流程
虽然,我在上面分了两个主题,但是,我不会分开讲,我会嵌套在源码中讲,这样影响才会比较深刻,还有,我这里不会再讲解设计模式的一些常用套路,直接上手代码,假如对设计模式(四人帮的23种)还没有概念,请执行去了解一下。好了,废话少说,开始我们的初始化之旅吧!

首先,我们先来看看SqlSessionFactoryBuilder 这里类,顾名思义,这里用到了构造者模式!这个是标准玩法,这里,大家也要注意,一般都是这样玩的,要让代码阅读者一眼就能看出你的设计思路,这个很重要!


从上图中,我们可以看到,里面有9个构造法,可以分为三组,①和②组都是配置文件方式,没有什么好讲,按照它们官方DTD玩就OK了,这里提点一下,它的的配置文件比较有洁癖,要求配置元素的位置,一定要按它们的顺序进行配置,要不会编译不过的。


其实,真正干活的是第三组的配置方法,上代码:

public SqlSessionFactory build(Reader reader, String environment, Properties properties) {
  try {
    XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties);
    return build(parser.parse()); // 调用第三组的构建方法
  } catch (Exception e) {
    throw ExceptionFactory.wrapException("Error building SqlSession.", e);
  } finally {
    ErrorContext.instance().reset();
    try {
      reader.close();
    } catch (IOException e) {
      // Intentionally ignore. Prefer previous error.
    }
  }
}
public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
  try {
    XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
    return build(parser.parse()); // 调用第三组的构建方法
  } catch (Exception e) {
    throw ExceptionFactory.wrapException("Error building SqlSession.", e);
  } finally {
    ErrorContext.instance().reset();
    try {
      inputStream.close();
    } catch (IOException e) {
      // Intentionally ignore. Prefer previous error.
    }
  }
}

其中,parse 方法的是核心,下面来看一下它的实现:


这里我们可以看到,parse 方法调用了parseConfiguration,参数是配置文件的根元素configuration!在这里方法中,我们可以看到,这里就是解析配置文件中各种配置项!配置的加载流程,主流程就差不多是这样,具体的解释配置,我会在系列下一一介绍,敬请关注!

3.总结
  • 在配置初始化中,我们看到mybatis里面使用了大量的构造者模式进行不同配置构造,在分析源码的时候,我们也看到了很多工厂模式,感觉最金典的是在解析配置的时候,使用模板方法模式,将变化(不同的配置方式)点进行抽离!让代码非常优雅和易扩展!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章