mybaits源码学习

Mybatis源码学习(1)--SqlSessionFactor

2020-07-08  本文已影响0人  yesAnd_

Mybatis源码学习(1)--SqlSessionFactoryBuilder

一、源码阅读的入口

阅读Mybatis源码的入口是类:SqlSessionFactoryBuilder,我们都知道sqlsession是mytais最核心类之一,而sqlsession是通过sqlSessionFactory工厂创建的,sqlSessionFactory采取的是builder构建者模式,也就是本类。

二、构建SqlSessionFactory

sqlSessionFactoryBuilder总提供了9中build()方法来构建factory,其中有两个是最主要的加载方式:

public SqlSessionFactory build(Reader reader, String environment, Properties properties) {
  try {
      //委托XMLConfigBuilder来解析xml文件,并构建
    XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties);
    return build(parser.parse());
  } catch (Exception e) {
      //这里是捕获异常,包装成自己的异常并抛出的idiom?,最后还要reset ErrorContext
    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.
    }
  }
}

其它集中方法最终都是调用这两个方法实现加载配置,看两个方法的入参可以知道连个方法的唯一区别就是:上边的方法接收Reader(java.io.Reader),下边的方法接收InputStream(java.io.InputStream),两种方法均可读取配置文件。不难发现两种方法殊途同归,都是委托XMLConfigBuilder来解析xml文件从而构建SqlSessionFactory。

XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties);
return build(parser.parse());

三、拓展:为什么使用工厂模式?

我们在各种源码中发现工厂模式满天飞,工厂模式有什么优点呢?

先了解下工厂模式

工厂方法模式包含如下角色:

工厂模式的时序图:

image-20200703002301754.png

工厂模式的优点:

image-20200703002318906.png

使用环境

引用

简单工厂模式链接

上一篇 下一篇

猜你喜欢

热点阅读