Mybatis全局配置文件解析

一、全局配置文件解析

mybatis官方中文文檔:

https://mybatis.org/mybatis-3/zh/index.html

本文主要分析的是

1、properties設置

mybatis可以使用properties來引入外部的properties配置文件的內容。

引入方式有兩種:

resource:引入類路徑下的資源:  <properties resource=""></properties>
url:引用網絡路徑或者磁盤路徑下的資源:<properties url="db.properties"></properties>

讀取規則:

如果一個屬性在不只一個地方進行了配置,那麼,MyBatis 將按照下面的順序來加載:

  • 首先讀取在 properties 元素體內指定的屬性。
  • 然後根據 properties 元素中的 resource 屬性讀取類路徑下屬性文件,或根據 url 屬性指定的路徑讀取屬性文件,並覆蓋之前讀取過的同名屬性。
  • 最後讀取作爲方法參數傳遞的屬性,並覆蓋之前讀取過的同名屬性。

因此,通過方法參數傳遞的屬性具有最高優先級,resource/url 屬性中指定的配置文件次之,最低優先級的則是 properties 元素中指定的屬性。

實例:

/*******************db.properties*******************/
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/qccr_okr?characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456

/*******************mybatis-config.xml*******************/
<configuration>
    <!--
    1、mybatis可以使用properties來引入外部的properties配置文件的內容
      resource:引入類路徑下的資源
      url:引用網絡路徑或者磁盤路徑下的資源
    -->
    <properties resource="db.properties"></properties>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

2、setings設置

如: 

  1.   cacheEnabled:全局性地開啓或關閉所有映射器配置文件中已配置的任何緩存。
  2.    useGeneratedKeys:允許 JDBC 支持自動生成主鍵,需要數據庫驅動支持。如果設置爲 true,將強制使用自動生成主鍵,     默認爲false。
  3.    mapUnderscoreToCamelCase:是否開啓駝峯命名自動映射.

           等。

實例:

<settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <setting name="cacheEnabled" value="true"/>
        <setting name="useGeneratedKeys" value="false"/>
</settings>

3、typeAliases(類型別名)設置

類型別名可爲 Java 類型設置一個縮寫名字。 它僅用於 XML 配置,意在降低冗餘的全限定類名書寫。

兩種設置方式:

一種是基於xml標籤方式進行設置。

一種是基於註解的方式進行設置。

實例:

/*****類別名設置:當這樣配置時,Blog 可以用在任何使用 domain.blog.Blog 的地方****/
<typeAliases>
  <typeAlias alias="Blog" type="domain.blog.Blog"/>
</typeAliases>

/*****也可以指定一個包名,MyBatis 會在包名下面搜索需要的 Java Bean****/
比如:
<typeAliases>
  <package name="domain.blog"/>
</typeAliases>
會搜索每一個在包 domain.blog 中的 Java Bean

/***********還可以用直接方式來起別名**********/
@Alias("author")
public class Author {
    ...
}

4、類型處理器(typeHandlers)設置

MyBatis 在設置預處理語句(PreparedStatement)中的參數或從結果集中取出一個值時, 都會用類型處理器將獲取到的值以合適的方式轉換成 Java 類型。

下表描述了一些默認的類型處理器:

你可以重寫已有的類型處理器或創建你自己的類型處理器來處理不支持的或非標準的類型:

1、實現 org.apache.ibatis.type.TypeHandler 接口

2、繼承一個很便利的類 org.apache.ibatis.type.BaseTypeHandler。

<!-- mybatis-config.xml -->
<typeHandlers>
  <typeHandler handler="org.mybatis.example.ExampleTypeHandler"/>
</typeHandlers>

5、環境配置(environments)設置

environments 元素定義瞭如何配置環境。

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

標籤解釋:

  • 默認使用的環境 ID(比如:default="development")。
  • 每個 environment 元素定義的環境 ID(比如:id="development")。
  • 事務管理器的配置(比如:type="JDBC")。
  • 數據源的配置(比如:type="POOLED")。

       默認環境和環境 ID 顧名思義。 環境可以隨意命名,但務必保證默認的環境 ID 要匹配其中一個環境 ID。

事務管理器(transactionManager):

1、JDBC:直接使用了 JDBC 的提交和回滾設施,它依賴從數據源獲得的連接來管理事務作用域。

2、MANAGED:這個配置幾乎沒做什麼。它從不提交或回滾一個連接,而是讓容器來管理事務的整個生命週期(比如 JEE 應用服務器的上下文)。 默認情況下它會關閉連接。

<transactionManager type="MANAGED">
  <property name="closeConnection" value="false"/>
</transactionManager>

3、定義 MyBatis 對事務的處理:實現TransactionFactory接口和Transaction來實現自定義。

6、數據源(dataSource)設置

dataSource 元素使用標準的 JDBC 數據源接口來配置 JDBC 連接對象的資源。大多數 MyBatis 應用程序會按示例中的例子來配置數據源。雖然數據源配置是可選的,但如果要啓用延遲加載特性,就必須配置數據源。

有三種內建的數據源類型:

UNPOOLED:這個數據源的實現會每次請求時打開和關閉連接。雖然有點慢,但對那些數據庫連接可用性要求不高的簡單應用程序來說,是一個很好的選擇。 性能表現則依賴於使用的數據庫,對某些數據庫來說,使用連接池並不重要,這個配置就很適合這種情形。

POOLED: 這種數據源的實現利用“池”的概念將 JDBC 連接對象組織起來,避免了創建新的連接實例時所必需的初始化和認證時間。 這種處理方式很流行,能使併發 Web 應用快速響應請求。

JNDI:這個數據源實現是爲了能在如 EJB 或應用服務器這類容器中使用,容器可以集中或在外部配置數據源,然後放置一個 JNDI 上下文的數據源引用。

7、數據庫廠商標識(databaseIdProvider)設置(移植性)

MyBatis 可以根據不同的數據庫廠商執行不同的語句,這種多廠商的支持是基於映射語句中的 databaseId 屬性。 MyBatis 會加載帶有匹配當前數據庫 databaseId 屬性和所有不帶 databaseId 屬性的語句。 如果同時找到帶有 databaseId 和不帶 databaseId 的相同語句,則後者會被捨棄。 爲支持多廠商特性,只要像下面這樣在 mybatis-config.xml 文件中加入 databaseIdProvider 即可:

<databaseIdProvider type="DB_VENDOR" />

實例:

8、映射器(mappers)

既然 MyBatis 的行爲已經由上述元素配置完了,我們現在就要來定義 SQL 映射語句了。 但首先,我們需要告訴 MyBatis 到哪裏去找到這些語句。 在自動查找資源方面,Java 並沒有提供一個很好的解決方案,所以最好的辦法是直接告訴 MyBatis 到哪裏去找映射文件。

<!-- 使用相對於類路徑的資源引用 -->
<mappers>
  <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
  <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
  <mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>

<!-- 使用完全限定資源定位符(URL) -->
<mappers>
  <mapper url="file:///var/mappers/AuthorMapper.xml"/>
  <mapper url="file:///var/mappers/BlogMapper.xml"/>
  <mapper url="file:///var/mappers/PostMapper.xml"/>
</mappers>

<!-- 使用映射器接口實現類的完全限定類名 -->
<mappers>
  <mapper class="org.mybatis.builder.AuthorMapper"/>
  <mapper class="org.mybatis.builder.BlogMapper"/>
  <mapper class="org.mybatis.builder.PostMapper"/>
</mappers>

<!-- 將包內的映射器接口實現全部註冊爲映射器 -->
<mappers>
  <package name="org.mybatis.builder"/>
</mappers>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章