關於 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裏面使用了大量的構造者模式進行不同配置構造,在分析源碼的時候,我們也看到了很多工廠模式,感覺最金典的是在解析配置的時候,使用模板方法模式,將變化(不同的配置方式)點進行抽離!讓代碼非常優雅和易擴展!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章