1. 程式人生 > 其它 >2.MyBatis配置檔案(mybatis-config.xml)

2.MyBatis配置檔案(mybatis-config.xml)

一、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><!-- 配置 -->
<properties /><!-- 屬性 -->
<settings /><!-- 設定 -->
<typeAliases /><!-- 型別命名 -->
<typeHandlers /><!-- 型別處理器 -->
<objectFactory /><!-- 物件工廠 -->
<plugins /><!-- 外掛 -->
<environments><!-- 配置環境 -->
<environment><!-- 環境變數 -->
<transactionManager /><!-- 事務管理器 -->
<dataSource /><!-- 資料來源 -->
</environment>
</environments>
<databaseIdProvider /><!-- 資料庫廠商標識 -->
<mappers /><!-- 對映器 -->
</configuration>

mybatis-config.xml 檔案中的元素節點是有一定順序的,節點位置必須按以上位置排序,否則會編譯錯誤。

下面介紹 XML 配置檔案中的重要元素(標籤)。

configuration 元素是整個 XML 配置檔案的根節點,其角色就相當於是 MyBatis 的總管,MyBatis 所有的配置資訊都會存放在它裡面。

二、properties標籤

properties 標籤可以通過 resource 屬性指定外部 properties 檔案(database.properties),也可以通過 properties 子元素配置。

2.1 指定檔案

使用 properties 指定外部檔案,程式碼如下。

  • <properties resource="mybatisDemo/resources/database.properties"/>

database.properties 用於描述資料庫連線的相關配置,例如資料庫驅動、連線資料庫的 url、資料庫使用者名稱、資料庫密碼等。

2.2 properties子元素配置

通過 properties 子元素 property 配置 username 和 password 變數,然後在 environments 節點中引用這些變數,程式碼如下。

  • <properties>
  • <property name="username"
    value="root"/>
  • <property name="password" value="root"/>
  • </properties>

在environments 節點中引用 username 和 password 變數。

  • <environments default="development">
  • <environment id="development">
  • <transactionManager type="JDBC"/>
  • <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>

也可以不使用 properties 標籤,直接將屬性值寫在 value 中。

三、settings標籤

settings 標籤用於配置 MyBatis 的執行時行為,它能深刻的影響 MyBatis 的底層執行,一般不需要大量配置,大部分情況下使用其預設值即可。

settings 的配置項很多,但是真正用到的不會太多,我們把常用的配置項研究清楚就可以了。settings 配置項說明如下表所示(表中紅色字型的配置項為常用配置項)。

settings 配置項說明
配置項 作用 配置選項 預設值
cacheEnabled 該配置影響所有對映器中配置快取的全域性開關 true|false true
lazyLoadingEnabled 延遲載入的全域性開關。當開啟時,所有關聯物件都會延遲載入。在特定關聯關係中可通過設定 fetchType 屬性來覆蓋該項的開關狀態 true|false false
aggressiveLazyLoading 當啟用時,對任意延遲屬性的呼叫會使帶有延遲載入屬性的物件完整載入;反之,每種屬性將會按需載入 true|false 版本3.4.1 (不包含)
之前預設值為 true,之後為 false
multipleResultSetsEnabled 是否允許單一語句返回多結果集(需要相容驅動) true|false true
useColumnLabel 使用列標籤代替列名。不同的驅動會有不同的表現,具體可參考相關驅動文件或通過測試這兩種不同的模式來觀察所用驅動的結果 true|false true
useGeneratedKeys 允許JDBC 支援自動生成主鍵,需要驅動相容。如果設定為 true,則這個設定強制使用自動生成主鍵,儘管一些驅動不能相容但仍可正常工作(比如 Derby) true|false false
autoMappingBehavior 指定 MyBatis 應如何自動對映列到欄位或屬性。
NONE 表示取消自動對映。
PARTIAL 表示只會自動對映,沒有定義巢狀結果集和對映結果集。
FULL 會自動對映任意複雜的結果集(無論是否巢狀)
NONE、PARTIAL、FULL PARTIAL
autoMappingUnkno wnColumnBehavior 指定自動對映當中未知列(或未知屬性型別)時的行為。 預設是不處理,只有當日志級別達到 WARN 級別或者以下,才會顯示相關日誌,如果處理失敗會丟擲 SqlSessionException 異常 NONE、WARNING、FAILING NONE
defaultExecutorType 配置預設的執行器。SIMPLE 是普通的執行器;REUSE 會重用預處理語句(prepared statements);BATCH 執行器將重用語句並執行批量更新 SIMPLE、REUSE、BATCH SIMPLE
defaultStatementTimeout 設定超時時間,它決定驅動等待資料庫響應的秒數 任何正整數 Not Set (null)
defaultFetchSize 設定資料庫驅動程式預設返回的條數限制,此引數可以重新設定 任何正整數 Not Set (null)
safeRowBoundsEnabled 允許在巢狀語句中使用分頁(RowBounds)。如果允許,設定 false true|false false
safeResultHandlerEnabled 允許在巢狀語句中使用分頁(ResultHandler)。如果允許,設定false true|false true
mapUnderscoreToCamelCase 是否開啟自動駝峰命名規則對映,即從經典資料庫列名 A_COLUMN 到經典 Java 屬性名 aColumn 的類似對映 true|false false
localCacheScope MyBatis 利用本地快取機制(Local Cache)防止迴圈引用(circular references)和加速聯復巢狀査詢。
預設值為 SESSION,這種情況下會快取一個會話中執行的所有查詢。若設定值為 STATEMENT,本地會話僅用在語句執行上,對相同 SqlScssion 的不同調用將不會共享資料
SESSION|STATEMENT SESSION
jdbcTypeForNull 當沒有為引數提供特定的 JDBC 型別時,為空值指定 JDBC 型別。某些驅動需要指定列的 JDBC 型別,多數情況直接用一般型別即可,比如 NULL、VARCHAR 或 OTHER NULL、VARCHAR、OTHER OTHER
lazyLoadTriggerMethods 指定哪個物件的方法觸發一次延遲載入 equals、clone、hashCode、toString
defaultScriptingLanguage 指定動態 SQL 生成的預設語言 org.apache.ibatis
.script.ing.xmltags
.XMLDynamicLanguageDriver
callSettersOnNulls 指定當結果集中值為 null 時,是否呼叫對映物件的 setter(map 物件時為 put)方法,這對於 Map.kcySet() 依賴或 null 值初始化時是有用的。注意,基本型別(int、boolean 等)不能設定成 null true|false false
logPrefix 指定 MyBatis 增加到日誌名稱的字首 任何字串 Not set
loglmpl 指定 MyBatis 所用日誌的具體實現,未指定時將自動査找 SLF4J|LOG4J|LOG4J2|JDK_LOGGING
|COMMONS_LOGGING
|ST DOUT_LOGGING|NO_LOGGING
Not set
proxyFactory 指定 MyBatis 建立具有延遲加栽能力的物件所用到的代理工具 CGLIB|JAVASSIST JAVASSIST (MyBatis 版本為 3.3 及以上的)
vfsImpl 指定 VFS 的實現類 提供 VFS 類的全限定名,如果存在多個,可以使用逗號分隔 Not set
useActualParamName 允許用方法引數中宣告的實際名稱引用引數。要使用此功能,專案必須被編譯為 Java 8 引數的選擇。(從版本 3.4.1 開始可以使用) true|false true


下面給出一個全量的配置樣例,如下所示。

<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25"/>
<setting name="defaultFetchSize" value="100"/>
<setting name="safeRowBoundsEnabled" value="false"/>
<setting name="mapUnderscoreToCamelCase" value="false"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="OTHER"/>
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>

四、typeAliases標籤

為了不在任何地方都指定類的全限定名,我們可以使用typeAliases 標籤定義一個別名。

例如,在 net.bianchengbang.po 包中有一個 Student 類,則該類的全限定名稱為 net.bianchengbang.po.Student。使用typeAliases 標籤定義別名,這樣就不用每次都書寫類的全限定名稱了,程式碼如下。

  • <typeAliases>
  • <typeAlias alias = "Student" type = "net.bianchengbang.po.Student"/>
  • </typeAliases>

如果需要對同一個包下的多個類定義別名,則可以定義為:

  • <typeAliases>
  • <package name="net.biancheng.po"/>
  • </typeAliases>

這樣 MyBatis 將掃描 net.biancheng.po 包裡面的類,將其第一個字母變為小寫作為其別名,例如 Student 別名為 student,User 別名為 user。

五、typeHandlers標籤

typeHandlers 主要將獲取的值合理地轉化為 Java 型別。在 typeHandler 中,分為 jdbcType 和 javaType,其中 jdbcType 用於定義資料庫型別,而 javaType 用於定義 Java 型別,typeHandler 的作用就是承擔 jdbcType 和 javaType 之間的相互轉換。

MyBatis 支援自定義處理型別,在自定義處理型別時,需要實現 org.apache.ibatis.type.TypeHandler 介面或繼承 org.apache.ibatis.type.BaseTypeHandle 類。詳細可參考官網:http://www.mybatis.org/mybatis-3/zh/configuration.html#typeHandlers

六、environments標籤

在 environments 標籤中,可以配置 MyBatis 的多套執行環境,將 SQL 對映到多個不同的資料庫上。

environment 是 environments 的子標籤,用來配置 MyBatis 的一套執行環境,需指定執行環境 ID、事務管理、資料來源配置等相關資訊。

我們可以通過配置多個 environment 標籤來連線多個數據庫,需要注意的是必須指定其中一個為預設執行環境(通過default指定)。

environment 標籤提供了兩個子標籤,即transactionManager 和 dataSource。

七、transactionManager標籤

MyBatis 支援兩個事務管理器,即 JDBC 和 MANAGED。

如果使用 JDBC 型別的事務管理器,則應用程式伺服器負責事務管理操作,例如提交、回滾等。如果使用 MANAGED 型別的事務管理器,則應用程式伺服器負責管理連線生命週期。

八、dataSource標籤

用於配置資料庫的連線屬性,例如要連線的資料庫的驅動程式名稱、URL、使用者名稱和密碼等。

dataSource 中的 type 屬性用於指定資料來源型別,有以下 3 種類型。

1)UNPOOLED

UNPOOLED 沒有資料庫連線池,效率低下。MyBatis 需要開啟和關閉每個資料庫操作的連線,它有點慢,通常應用於簡單的應用程式。

2)POOLED

對於 POOLED 資料來源型別,MyBatis 將維護一個數據庫連線池。並且對於每個資料庫的操作,MyBatis 都會使用連線池中的連線,並在操作完成後將它們返回到池中。減少了建立新連線所需的初始連線和身份驗證時間。

3)JNDI

對於 JNDI 的資料來源型別,MyBatis 將從 JNDI 資料來源中獲取連線。

dataSource 標籤示例程式碼如下:

<dataSource type="POOLED">
<!-- MySQL資料庫驅動 -->
<property name="driver" value="com.mysql.jdbc.Driver" />
<!-- 連線資料庫的URL -->
<property name="url"
value="jdbc:mysql://localhost:3306/test?characterEncoding=utf8" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>

九、mappers標籤

mappers 標籤用於指定 MyBatis SQL 對映檔案的路徑。

mapper 是 mappers 的子標籤,mapper 中的 resource 屬性用於指定 SQL 對映檔案的路徑(類資源路徑)

例如,SQL 對映檔案的名稱是 Student.xml,它位於名為 net.biancheng.mapper 的包中,那麼您可以這樣配置:

  • <mappers>
  • <mapper resource="net/biancheng/mapper/Student.xml"/>
  • </mappers>