最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis連接數(shù)據(jù)庫配置的基本步驟和機制

 更新時間:2024年05月16日 08:42:10   作者:鄧?yán)贒L  
MyBatis 是一個流行的持久層框架,它通過使用XML或注解的方式將SQL語句、存儲過程和Java方法進行綁定,從而避免了手寫大量的JDBC代碼和手動設(shè)置參數(shù)與結(jié)果集,本文給大家介紹了MyBatis連接數(shù)據(jù)庫配置的基本步驟和機制,需要的朋友可以參考下

前言

MyBatis 是一個流行的持久層框架,它通過使用XML或注解的方式將SQL語句、存儲過程和Java方法進行綁定,從而避免了手寫大量的JDBC代碼和手動設(shè)置參數(shù)與結(jié)果集。以下是 MyBatis 連接數(shù)據(jù)庫的基本步驟和機制:

MyBatis源碼版本:3.5.16

MyBatis-config.xml 示例

<environments default="development">  
    <environment id="development">  
        <transactionManager type="JDBC"/>  
        <dataSource type="POOLED">  
            <property name="driver" value="${db.driver}"/>  
            <property name="url" value="${db.url}"/>  
            <property name="username" value="${db.username}"/>  
            <property name="password" value="${db.password}"/>  
        </dataSource>  
    </environment>  
</environments>

1. 讀取配置文件

MyBatis 通過 Resources 類讀取配置文件。配置文件通常是 XML 格式,如 mybatis-config.xml。

關(guān)鍵代碼

String resource = "mybatis-config.xml";
Reader reader = Resources.getResourceAsReader(resource)

2. 解析配置文件

SqlSessionFactoryBuilder 使用 XMLConfigBuilder 解析配置文件,將 XML 配置轉(zhuǎn)換為 Java 對象。

關(guān)鍵代碼

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties);

XMLConfigBuilder 源碼片段

private void parseConfiguration(XNode root) {  
  try {  
    // issue #117 先讀取屬性 
    propertiesElement(root.evalNode("properties"));  
    Properties settings = settingsAsProperties(root.evalNode("settings"));  
    loadCustomVfsImpl(settings);  
    loadCustomLogImpl(settings);  
    typeAliasesElement(root.evalNode("typeAliases"));  
    pluginsElement(root.evalNode("plugins"));  
    objectFactoryElement(root.evalNode("objectFactory"));  
    objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));  
    reflectorFactoryElement(root.evalNode("reflectorFactory"));  
    settingsElement(settings);  
    // read it after objectFactory and objectWrapperFactory issue #631  
    environmentsElement(root.evalNode("environments"));  
    databaseIdProviderElement(root.evalNode("databaseIdProvider"));  
    typeHandlersElement(root.evalNode("typeHandlers"));  
    mappersElement(root.evalNode("mappers"));  
  } catch (Exception e) {  
    throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + e, e);  
  }  
}

XMLConfigBuilder解析XML配置,并生成Configuration對象。

3. 創(chuàng)建 SqlSessionFactory

Configuration 對象包含了所有配置信息,包括環(huán)境配置、數(shù)據(jù)源配置等。SqlSessionFactoryBuilder 使用 Configuration 創(chuàng)建 DefaultSqlSessionFactory。

關(guān)鍵代碼

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

4. 建立數(shù)據(jù)庫連接

DefaultSqlSessionFactory 創(chuàng)建 SqlSession 時,通過 Environment 配置和 DataSource 獲取數(shù)據(jù)庫連接。

DefaultSqlSessionFactory 源碼片段

public SqlSession openSession() {  
  return openSessionFromDataSource(configuration.getDefaultExecutorType(), null, false);  
}

openSessionFromDataSource 方法中,DataSource 被用于獲取數(shù)據(jù)庫連接。

關(guān)鍵代碼

private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level,  
    boolean autoCommit) {  
  //環(huán)境配置  
  final Environment environment = configuration.getEnvironment();  
  //事務(wù)工廠  
  final TransactionFactory transactionFactory = getTransactionFactoryFromEnvironment(environment);  
  //創(chuàng)建事務(wù)  
  Transaction tx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit);  
  //創(chuàng)建執(zhí)行器  
  final Executor executor = configuration.newExecutor(tx, execType);  
  //返回SqlSession  
  return new DefaultSqlSession(configuration, executor, autoCommit);
}

5. 數(shù)據(jù)源配置

DataSource 配置在 mybatis-config.xml 文件中,通過 DataSourceFactory 創(chuàng)建具體的數(shù)據(jù)源實例。

關(guān)鍵代碼

// 獲取數(shù)據(jù)源工廠
String type = context.getStringAttribute("type");  
Properties props = context.getChildrenAsProperties();  
DataSourceFactory factory = (DataSourceFactory) resolveClass(type).getDeclaredConstructor().newInstance();  
factory.setProperties(props);    
// 獲取數(shù)據(jù)源
DataSource dataSource = factory.getDataSource();

總結(jié)

MyBatis連接數(shù)據(jù)庫的步驟包括:

  • 讀取配置文件:通過 Resources 類讀取 XML 文件。
  • 解析配置文件:使用 XMLConfigBuilder 解析 XML,生成 Configuration 對象。
  • 創(chuàng)建 SqlSessionFactory:使用 SqlSessionFactoryBuilderConfiguration 創(chuàng)建 DefaultSqlSessionFactory。
  • 建立數(shù)據(jù)庫連接DefaultSqlSessionFactory 創(chuàng)建 SqlSession,使用 DataSource 獲取數(shù)據(jù)庫連接。

以上就是MyBatis連接數(shù)據(jù)庫配置的基本步驟和機制的詳細(xì)內(nèi)容,更多關(guān)于MyBatis連接數(shù)據(jù)庫配置的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java之Spring注解配置bean實例代碼解析

    Java之Spring注解配置bean實例代碼解析

    這篇文章主要介紹了Java之Spring注解配置bean實例代碼解析,具有一定參考價值,文中還有有關(guān)Spring學(xué)習(xí)的資料下載鏈接及相關(guān)內(nèi)容推薦,需要的朋友可以了解下。
    2017-09-09
  • Java實現(xiàn)本地文件批量重命名的示例代碼

    Java實現(xiàn)本地文件批量重命名的示例代碼

    本文主要介紹了Java實現(xiàn)本地文件批量重命名的示例代碼,主要步驟為獲取指定目錄下的所有文件,對每個文件進行修改,將修改后的文件名賦給該文件,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • Spring的循環(huán)依賴、三級緩存解決方案源碼詳細(xì)解析

    Spring的循環(huán)依賴、三級緩存解決方案源碼詳細(xì)解析

    這篇文章主要介紹了Spring的循環(huán)依賴、三級緩存解決方案源碼詳細(xì)解析,在Spring中,由于IOC的控制反轉(zhuǎn),創(chuàng)建對象不再是簡單的new出來,而是交給Spring去創(chuàng)建,會經(jīng)歷一系列Bean的生命周期才創(chuàng)建出相應(yīng)的對象,需要的朋友可以參考下
    2024-01-01
  • Java數(shù)據(jù)結(jié)構(gòu)之對象的比較

    Java數(shù)據(jù)結(jié)構(gòu)之對象的比較

    比較對象是面向?qū)ο缶幊陶Z言的一個基本特征,下面這篇文章主要給大家介紹了關(guān)于Java數(shù)據(jù)結(jié)構(gòu)之對象的比較,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • SpringBoot項目整合MybatisPlus并使用SQLite作為數(shù)據(jù)庫的過程

    SpringBoot項目整合MybatisPlus并使用SQLite作為數(shù)據(jù)庫的過程

    SQLite是一個緊湊的庫,啟用所有功能后,庫大小可以小于 750KiB, 具體取決于目標(biāo)平臺和編譯器優(yōu)化設(shè)置, 內(nèi)存使用量和速度之間需要權(quán)衡,這篇文章主要介紹了SpringBoot項目整合MybatisPlus并使用SQLite作為數(shù)據(jù)庫,需要的朋友可以參考下
    2024-07-07
  • Java多線程之搞定最后一公里詳解

    Java多線程之搞定最后一公里詳解

    Java 給多線程編程提供了內(nèi)置的支持。 一條線程指的是進程中一個單一順序的控制流,一個進程中可以并發(fā)多個線程,每條線程并行執(zhí)行不同的任務(wù),多線程是多任務(wù)的一種特別的形式,但多線程使用了更小的資源開銷
    2021-10-10
  • Spring中Feign的調(diào)用流程詳解

    Spring中Feign的調(diào)用流程詳解

    這篇文章主要介紹了Spring中Feign的調(diào)用流程詳解,分析過了創(chuàng)建的代理是FeignInvocationHandler,那我們就打斷點,停在它的反射方法上,看看到底做了什么,需要的朋友可以參考下
    2023-11-11
  • Java使用pdfbox實現(xiàn)給pdf文件加圖片水印

    Java使用pdfbox實現(xiàn)給pdf文件加圖片水印

    有時候需要給pdf加水印,市面上工具都是收費的要會員,還是自食其力吧;嘗試過 spire.pdf.free 那個超過10頁就不行了!所以本文還是使用了pdfbox,感興趣的可以了解一下
    2022-11-11
  • mybatis-plus之如何實現(xiàn)in嵌套sql

    mybatis-plus之如何實現(xiàn)in嵌套sql

    這篇文章主要介紹了mybatis-plus之如何實現(xiàn)in嵌套sql問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Servlet的5種方式實現(xiàn)表單提交(注冊小功能),后臺獲取表單數(shù)據(jù)實例

    Servlet的5種方式實現(xiàn)表單提交(注冊小功能),后臺獲取表單數(shù)據(jù)實例

    這篇文章主要介紹了Servlet的5種方式實現(xiàn)表單提交(注冊小功能),后臺獲取表單數(shù)據(jù)實例,非常具有實用價值,需要的朋友可以參考下
    2017-05-05

最新評論

峨山| 嘉兴市| 利津县| 景泰县| 偏关县| 沛县| 武川县| 屯门区| 贵州省| 河南省| 陆丰市| 京山县| 西丰县| 宾川县| 无棣县| 宁海县| 宣威市| 宜宾市| 东山县| 大厂| 图木舒克市| 高邑县| 兰州市| 民县| 黔南| 远安县| 万全县| 鲁甸县| 汝南县| 黄陵县| 漯河市| 格尔木市| 岳池县| 石林| 治县。| 海原县| 平舆县| 普洱| 方山县| 宁波市| 东山县|