天天看點

每日分享- Mybatis 項目程式是如何解析配置檔案

作者:理工男二号

MyBatis是一款優秀的ORM架構,它使用XML檔案來配置資料源、SQL語句、映射關系等資訊。MyBatis架構在啟動時會解析這些配置檔案,将配置資訊加載到記憶體中,以便在應用程式運作時快速讀取和使用。下面是MyBatis解析配置檔案的原理和示例:

一 MyBatis解析配置檔案的原理

MyBatis解析配置檔案主要依靠XML解析器和XPath表達式語言。XML解析器可以解析XML檔案,将XML檔案中的内容轉化為記憶體中的對象,這些對象包括元素、屬性等等。XPath表達式語言可以通過路徑表達式快速通路XML文檔中的資料。MyBatis将SQL語句、資料源等配置資訊寫在XML檔案中,通過XPath表達式語言快速通路這些配置資訊。

二 MyBatis解析配置檔案的示例

MyBatis配置檔案通常包括以下幾個部分:

  • 資料源配置
  • 映射檔案配置
  • 全局配置

下面以一個簡單的MyBatis配置檔案為例,介紹MyBatis如何解析配置檔案。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
      </dataSource>
    </environment>
  </environments>
  
  <mappers>
    <mapper resource="com/example/mapper/UserMapper.xml"/>
  </mappers>
  
  <settings>
    <setting name="cacheEnabled" value="true"/>
  </settings>
</configuration>           

上面的配置檔案包含了資料源配置、映射檔案配置和全局配置。

  • 資料源配置:MyBatis使用<dataSource>标簽配置資料源資訊,包括資料庫驅動、URL、使用者名和密碼等。這些資訊被包裝為DataSource對象,以便在運作時連接配接資料庫。
  • 映射檔案配置:MyBatis使用<mappers>标簽配置映射檔案資訊,包括映射檔案的路徑和名稱。這些資訊被用來建構Mapper接口,以便在運作時執行SQL語句。
  • 全局配置:MyBatis使用<settings>标簽配置全局配置資訊,包括緩存開關、SQL執行逾時時間、SQL日志輸出格式等。

MyBatis通過XPath表達式語言解析上述配置資訊,可以使用以下XPath表達式通路相關配置資訊:

資料源配置:/configuration/environments/environment/dataSource

映射檔案配置:/configuration/mappers/mapper

全局配置:/configuration/settings

MyBatis解析配置檔案的過程大緻如下:

  1. 使用XML解析器讀取配置檔案,将配置檔案轉換為記憶體中的XML文檔對象模型(DOM)樹。
  2. 使用XPath表達式語言周遊DOM樹,擷取配置資訊。
  3. 根據配置資訊建立相應的Java對象,例如資料源對象和Mapper接口對象等。
  4. 将Java對象存儲在MyBatis的内部資料結構中,以便在運作時快速讀取和使用。

在上面的示例中,MyBatis會使用XPath表達式語言擷取資料源資訊、映射檔案資訊和全局配置資訊,并建立相應的Java對象。其中,資料源資訊會被封裝為PooledDataSource對象,映射檔案資訊會被封裝為MapperRegistry對象,全局配置資訊會被封裝為Configuration對象。

繼續閱讀