欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis連接數據庫配置的基本步驟和機制

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

前言

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

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

關鍵代碼

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

2. 解析配置文件

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

關鍵代碼

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)境配置、數據源配置等。SqlSessionFactoryBuilder 使用 Configuration 創(chuàng)建 DefaultSqlSessionFactory。

關鍵代碼

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

4. 建立數據庫連接

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

DefaultSqlSessionFactory 源碼片段

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

openSessionFromDataSource 方法中,DataSource 被用于獲取數據庫連接。

關鍵代碼

private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level,  
    boolean autoCommit) {  
  //環(huán)境配置  
  final Environment environment = configuration.getEnvironment();  
  //事務工廠  
  final TransactionFactory transactionFactory = getTransactionFactoryFromEnvironment(environment);  
  //創(chuàng)建事務  
  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. 數據源配置

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

關鍵代碼

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

總結

MyBatis連接數據庫的步驟包括:

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

以上就是MyBatis連接數據庫配置的基本步驟和機制的詳細內容,更多關于MyBatis連接數據庫配置的資料請關注腳本之家其它相關文章!

相關文章

  • Java多線程下載網圖的完整案例

    Java多線程下載網圖的完整案例

    這篇文章主要給大家介紹了關于Java多線程下載網圖的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • SpringBoot Application注解原理及代碼詳解

    SpringBoot Application注解原理及代碼詳解

    這篇文章主要介紹了SpringBoot Application注解原理及代碼詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • Spring Boot攔截器和過濾器實例解析

    Spring Boot攔截器和過濾器實例解析

    這篇文章主要介紹了Spring Boot攔截器和過濾器實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • Java 8 Stream流強大的原理

    Java 8 Stream流強大的原理

    這篇文章主要介紹了Java 8 Stream流強大的原理,Java 8 API添加了一個新的抽象稱為流Stream,可以讓你以一種聲明的方式處理數據。本文會對Stream的實現原理進行剖析,具有一定的參考價值,需要的朋友可以參考一下
    2021-12-12
  • Java 模擬數據庫連接池的實現代碼

    Java 模擬數據庫連接池的實現代碼

    這篇文章主要介紹了Java 模擬數據庫連接池的實現,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Java實現調用外部程序的示例代碼

    Java實現調用外部程序的示例代碼

    本文主要介紹了Java實現調用外部程序的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • Springboot如何基于assembly服務化實現打包

    Springboot如何基于assembly服務化實現打包

    這篇文章主要介紹了Springboot如何基于assembly服務化實現打包,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • 詳解pom.xml中maven profile的激活方式

    詳解pom.xml中maven profile的激活方式

    本文主要介紹了詳解pom.xml中maven profile的激活方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • Spring Batch讀取txt文件并寫入數據庫的方法教程

    Spring Batch讀取txt文件并寫入數據庫的方法教程

    這篇文章主要給大家介紹了Spring Batch讀取txt文件并寫入數據庫的方法,SpringBatch 是一個輕量級、全面的批處理框架。這里我們用它來實現文件的讀取并將讀取的結果作處理,處理之后再寫入數據庫中的功能。需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-04-04
  • Java之TreeSet和TreeMap的兩種排序方式解讀

    Java之TreeSet和TreeMap的兩種排序方式解讀

    這篇文章主要介紹了Java之TreeSet和TreeMap的兩種排序方式解讀,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評論