色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SqlSessionFactory創(chuàng)建過程

科技綠洲 ? 來源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-09-25 14:55 ? 次閱讀

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

1、實(shí)例代碼

在實(shí)例代碼中,我們?cè)跍y(cè)試類中寫了一個(gè) 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);

是的,那只是你以為的兩行代碼,其實(shí)......

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

2、代碼剖析

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

①、獲取配置文件輸入流

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)缺點(diǎn),我這里不做詳細(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 配置文件里面的各個(gè)標(biāo)簽名嘛,是的,這就是解析該文件,然后全部放在 configuration 對(duì)象中。需要注意的是,這里的 configuration 對(duì)象不僅包括 mybatis-config.xml 文件內(nèi)容,也包括 xxxMapper.xml 文件內(nèi)容。

圖片

⑤、build(configuration)

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

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

⑥、DefaultSqlSessionFactory(configuration)

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

3、總結(jié)

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    762

    瀏覽量

    44117
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4779

    瀏覽量

    68525
  • factory
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    1901
  • mybatis
    +關(guān)注

    關(guān)注

    0

    文章

    60

    瀏覽量

    6709
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    labview怎么通過程序來創(chuàng)建波形圖表控件

    就是通過程序來實(shí)現(xiàn)控件的創(chuàng)建
    發(fā)表于 06-05 10:07

    MySql存儲(chǔ)過程創(chuàng)建以及Mybatis的調(diào)用遇到的問題概述

    MySql存儲(chǔ)過程創(chuàng)建以及Mybatis的調(diào)用
    發(fā)表于 07-04 11:06

    Linux內(nèi)核創(chuàng)建新進(jìn)程的過程分析

    PCB包含了一個(gè)進(jìn)程的重要運(yùn)行信息,所以我們將圍繞在創(chuàng)建一個(gè)新進(jìn)程時(shí),如何來建立一個(gè)新的PCB的這一個(gè)過程來進(jìn)行分析,在Linux系統(tǒng)中,PCB主要是存儲(chǔ)在一個(gè)叫做task_struct這一個(gè)結(jié)構(gòu)體中,創(chuàng)建新進(jìn)程僅能通過
    發(fā)表于 08-08 08:42

    TCP服務(wù)器創(chuàng)建過程

    (UCOSIII版本)的基礎(chǔ)上進(jìn)行修改,實(shí)現(xiàn)多客戶端連接的一個(gè)方法。1、TCP服務(wù)器創(chuàng)建過程建立一個(gè)TCP服務(wù)器需要經(jīng)過創(chuàng)建連接conn=netconn_new(NETCONN_TCP);//
    發(fā)表于 08-24 08:03

    ESP32--FreeRTOS任務(wù)的創(chuàng)建與刪除過程是怎樣的?

    ESP32--FreeRTOS任務(wù)的創(chuàng)建與刪除過程是怎樣的?
    發(fā)表于 01-14 06:02

    FreeRTOS的任務(wù)創(chuàng)建過程

    FreeRTOS筆記(四):任務(wù)創(chuàng)建/刪除,掛起/解掛詳解在第二篇筆記中介紹了任務(wù)創(chuàng)建的API,并且簡單使用了相關(guān)API,本文將詳細(xì)介紹任務(wù)創(chuàng)建過程。一、任務(wù)
    發(fā)表于 02-08 06:10

    淺談Keil-MDK創(chuàng)建及其編譯過程

    淺談Keil-MDK創(chuàng)建項(xiàng)目&編譯過程---Code-data,RO-data,RW-data,ZI-data一、編譯過程二、MDK 編譯工具(1)創(chuàng)建一個(gè)新的工程(2)添加 star
    發(fā)表于 02-24 06:03

    阿爾卡特軟交換產(chǎn)品VOIP數(shù)據(jù)創(chuàng)建過程

    阿爾卡特軟交換產(chǎn)品VOIP數(shù)據(jù)創(chuàng)建過程成都通信建設(shè)工程局 王璽 薛恒飛  郵政編碼 611130[摘要] 本文通過對(duì)阿爾卡特移動(dòng)軟交換設(shè)備在VOIP數(shù)據(jù)如何創(chuàng)建過程的介紹,簡
    發(fā)表于 05-16 01:39 ?6次下載

    altium-designer使用PCB向?qū)?b class='flag-5'>創(chuàng)建PCB詳細(xì)過程

    altium-designer使用PCB向?qū)?b class='flag-5'>創(chuàng)建PCB詳細(xì)過程,感興趣的可以看看。
    發(fā)表于 07-22 16:08 ?0次下載

    使用PCI Express模塊??創(chuàng)建Zynq UltraScale+的過程介紹

    本視頻介紹了使用處理子系統(tǒng)中的PCI Express模塊??創(chuàng)建Zynq UltraScale +解決方案的過程
    的頭像 發(fā)表于 11-28 06:35 ?3345次閱讀

    整理剖析,只為教你創(chuàng)建MySQL存儲(chǔ)過程

    簡單地說,存儲(chǔ)過程就是一條或者多條SQL語句的集合,可視為批文件,但是其作用不僅限于批處理。本篇主要介紹如何創(chuàng)建存儲(chǔ)過程和存儲(chǔ)函數(shù)以及變量的使用,如何調(diào)用、查看、修改、刪除存儲(chǔ)過程和存
    的頭像 發(fā)表于 07-02 17:11 ?2084次閱讀

    易靈思JTAG寫入Flash工程的創(chuàng)建過程和燒寫操作

    易靈思在通過JTAG寫入Flash時(shí),需要手動(dòng)創(chuàng)建一個(gè)打通JTAG到Flash的bridge,這里我們來介紹下工程創(chuàng)建過程和燒寫操作。
    的頭像 發(fā)表于 03-09 16:04 ?5396次閱讀
    易靈思JTAG寫入Flash工程的<b class='flag-5'>創(chuàng)建</b><b class='flag-5'>過程</b>和燒寫操作

    如何創(chuàng)建 Docker 鏡像的能力

    本文將帶大家繼續(xù)深入了解 Dockerfile 鏡像創(chuàng)建過程中最重要的配置文件內(nèi)容,更加透徹地了解整個(gè)容器鏡像的創(chuàng)建過程
    的頭像 發(fā)表于 09-16 09:39 ?1120次閱讀

    手寫一個(gè)MyBatis框架

    SqlSessionFactory 是獲取會(huì)話的工廠,每次使用MyBatis 操作數(shù)據(jù)庫時(shí), 都會(huì)開啟一個(gè)新的會(huì)話。在會(huì)話工廠的實(shí)現(xiàn)中,SqlSessionFactory 負(fù)責(zé)獲取數(shù)據(jù)源環(huán)境配置信息、構(gòu)建事務(wù)工廠和創(chuàng)建操作SQL
    的頭像 發(fā)表于 04-20 11:29 ?582次閱讀

    創(chuàng)建jar文件的過程

    在這篇文章中,我們將介紹一下以編程方式創(chuàng)建jar文件的過程。在編寫軟件時(shí),最終我們需要將其部署到生產(chǎn)狀態(tài)。在某些情況下,使用帶有獨(dú)立文件的classpath是可以的。通常情況下,處理一個(gè)文件會(huì)更方便
    的頭像 發(fā)表于 10-08 15:36 ?825次閱讀
    主站蜘蛛池模板: 国产成人免费在线观看| 久久久久免费视频| 扒开美女下面粉嫩粉嫩冒白浆| 2021全国精品卡一卡二| 又紧又大又爽精品一区二区 | a免费视频| 99精品视频在线观看re| 99国产精品| ewp系列虐杀在线视频| ASIAN大陆明星裸休合成PICS| 99婷婷久久精品国产一区二区| ava云直播| 哺乳期妇女挤奶水36d| 国产成A人片在线观看| 寂寞护士中文字幕 mp4| 免费观看成人www精品视频在线| 日本漫画之无彩翼漫画| 亚洲AV一宅男色影视| 中文字幕一区二区视频 | 伊人久久大香线蕉avapp下载| 34g污奶绵uk甩奶| 工口肉肉彩色不遮挡| 久草在线草a免费线看| 品色堂主页| 亚洲国产精品天堂在线播放| 4虎最新网址| 国产国拍精品AV在线观看| 久久九九有精品国产23百花影院| 欧美午夜精品一区二区蜜桃| 小女生RAPPER入口| 999视频在线观看| 国产热久久精| 男人的天堂色偷偷| 亚洲国产成人爱AV在线播放丿| 99精品在线观看| 国产无线乱码一区二三区| 年轻老师毛茸茸自由性| 亚洲黄色高清| 白丝女仆被强扒内裤| 久久精品国产亚洲AV未满十八| 色多多污污版免费下载安装|