日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本篇文章我們首先解析 SqlSessionFactory 的創(chuàng)建過程。

1、實例代碼

在實例代碼中,我們在測試類中寫了一個 init() 方法,里面包括了 SqlSessionFactory 的構(gòu)建,分為兩步。

第一步:讀取配置文件 MyBatis-config.xml 輸入流

第二步:根據(jù)輸入流構(gòu)建 SqlSessionFactory;

public void init() {
    //定義mybatis全局配置文件
    String resource = "mybatis-config.xml";
    //加載 mybatis 全局配置文件
    InputStream inputStream = null;
    try {
        inputStream = Resources.getResourceAsStream(resource);
    } catch (IOException e) {
        e.printStackTrace();
    }
    //構(gòu)建sqlSession的工廠
    sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

}

沒什么難的,去掉 try-catch,也就兩行代碼。

InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

是的,那只是你以為的兩行代碼,其實......

 

話不多說,指北君就來給大家揭秘這冰山下面的東西。

2、代碼剖析

根據(jù)上面的時序圖,我們分析根據(jù)源碼分析每個步驟。

①、獲取配置文件輸入流

InputStream inputStream = Resources.getResourceAsStream("mybatis.config.xml");

這里沒什么好說的,就是獲取配置文件的輸入流。

②、build(in)

這里的 in 就是上一步獲取的輸入流 inputStream。

  public SqlSessionFactory build(InputStream inputStream) {
    return build(inputStream, null, null);
  }

在進(jìn)入到 build 方法:

  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.
      }
    }
  }

③、XMLConfigBuilder(in)

這一段代碼是為了解析我們的配置文件,配置文件是 XML形式 ,我在之前的博客介紹過解析 XML 的幾種方式。

一種是基于樹的結(jié)構(gòu)來解析的稱為DOM;另一種是基于事件流的形式稱為SAX和(StAX)

兩者各有優(yōu)缺點,我這里不做詳細(xì)說明,想了解的可以看我之前的文章。

而 Mybatis 使用的是 DOM 形式,并結(jié)合 XPath 來解析配置文件。

④、parse()

    public Configuration parse() {
        if (this.parsed) {
            throw new BuilderException("Each XMLConfigBuilder can only be used once.");
        } else {
            this.parsed = true;
            this.parseConfiguration(this.parser.evalNode("/configuration"));
            return this.configuration;
        }
    }

從 /configuration 標(biāo)簽處開始解析。然后我們進(jìn)入到 this.parseConfiguration() 方法中:

    private void parseConfiguration(XNode root) {
        try {
            this.propertiesElement(root.evalNode("properties"));
            Properties settings = this.settingsAsProperties(root.evalNode("settings"));
            this.loadCustomVfs(settings);
            this.loadCustomLogImpl(settings);
            this.typeAliasesElement(root.evalNode("typeAliases"));
            this.pluginElement(root.evalNode("plugins"));
            this.objectFactoryElement(root.evalNode("objectFactory"));
            this.objectWrApperFactoryElement(root.evalNode("objectWrapperFactory"));
            this.reflectorFactoryElement(root.evalNode("reflectorFactory"));
            this.settingsElement(settings);
            this.environmentsElement(root.evalNode("environments"));
            this.databaseIdProviderElement(root.evalNode("databaseIdProvider"));
            this.typeHandlerElement(root.evalNode("typeHandlers"));
            this.mapperElement(root.evalNode("mappers"));
        } catch (Exception var3) {
            throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + var3, var3);
        }
    }

看到這是不是很熟悉了,這不就是mybatis-config.xml 配置文件里面的各個標(biāo)簽名嘛,是的,這就是解析該文件,然后全部放在 configuration 對象中。需要注意的是,這里的 configuration 對象不僅包括 mybatis-config.xml 文件內(nèi)容,也包括 xxxMapper.xml 文件內(nèi)容。


 

⑤、build(configuration)

  public SqlSessionFactory build(Configuration config) {
    return new DefaultSqlSessionFactory(config);
  }

就是去 new 了一個 DefaultSqlSessionFactory 對象,將 configuration 作為參數(shù)。

⑥、DefaultSqlSessionFactory(configuration)

    public DefaultSqlSessionFactory(Configuration configuration) {
        this.configuration = configuration;
    }

3、總結(jié)

自此,SqlSessionFactory 的創(chuàng)建過程就講完了,總的來說就是一個封裝了配置文件的工廠類。那么得到了 SqlSessionFactory 這個工廠對象,接下來干嘛?生產(chǎn) SqlSession,然后通過 SqlSession 進(jìn)行數(shù)據(jù)庫的增刪改查操作

沒錯,接下來,指北君將給大家介紹 SqlSession 的交互過程,這也是 Mybatis 里面最重要的一個對象。

分享到:
標(biāo)簽:Mybatis
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定