Mybatis配置檔案: enviroments執行環境自行理解
<configuration>
<!--mybatis其他配置-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!-- 配置資料來源 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/sqls?characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="admin"/>
</dataSource>
</environment>
</environments>
<!--mybatis其他配置-->
</configuration>
在mybatis的根配置檔案中,有一個environments
標籤。其作用是配置mybatis的環境,mybatis中執行配置多個環境。這樣做的好處在於,能把多個環境拆分。例如,一個專案中測試團隊與開發團隊所用的環境可能不一樣,此時就可以配置兩個環境,並設定environments
中的default屬性指定自己團隊所使用的資料庫。
<environments default="development">
<environment id="test">
<transactionManager type ="JDBC"/>
<!-- 配置測試所使用的資料來源 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="admin"/>
</dataSource>
</environment>
<environment id="development">
<transactionManager type="JDBC"/>
<!-- 配置開發所使用的資料來源 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/sqls?characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="admin"/>
</dataSource>
</environment>
</environments>
接下來解讀environments
標籤。
在environments
中可以有多個environment
,每個environment
以id
屬性作為唯一標識。通過environments
的default
屬性指定當前資料庫執行環境。
在environment
標籤中必須得有transactionManager
和dataSource
兩個子標籤。
transactionManager
指定事物管理,mybatis中可以指定JDBC 和 MANAGED
兩個預設的管理器。如果指定為JDBC
,則mybatis將採用JDBC的事物管理方式來進行事物管理。如果指定為MANAGED
,mybatis則採用J2EE容器的方式控制事物。
在mybaits中也可以自定義事物管理器。如果需要自定義事物管理,則自定義事物管理器類需要實現TransactionFactory
介面。然後type
屬性值指定為自定義事物管理器的全類名。
從原始碼中可以看出,mybatis預設的兩個事物管理值實際上是兩個別名,JDBC事物管理器的全名為:JdbcTransactionFactory,MANAGED的全類名則為: ManagedTransactionFactory
原始碼中檢視如下:
public Configuration() {
//....
typeAliasRegistry.registerAlias("JDBC", JdbcTransactionFactory.class);
typeAliasRegistry.registerAlias("MANAGED", ManagedTransactionFactory.class);
//...
}
JdbcTransactionFactory
和ManagedTransactionFactory
都實現了TransactionFactory
介面:
按照配置檔案,其根標籤的configuration對應Configuration類,在configuration類中構造器中註冊了JdbcTransactionFactory和ManagedTransactionFactory的別名
dataSource
標籤配置了對應的資料庫配置,例如資料來源連線型別等。在mybatis中dataSource
的type屬性可以選擇有以下幾種值:JNDI | POOLED | UNPOOLED | 自定義資料來源
- 指定
POOLED
後,mybatis則採用自帶預設的資料來源進行資料庫連線管理。 - 指定
UNPOOLED
後,mybatis則不採用資料來源連線資料庫。每次連線都建立新的會話,結束後銷燬會話(銷燬會話需要自己手動)。 - 指定
JNDI
後,mybatis則採用JNDI來管理資料庫連線。 自定義資料來源
: 當我們想採用第三方資料來源管理資料庫連線時,mybatis允許我們通過實現DataSourceFactory
介面來自定義資料來源設定。
在mybatis中,資料來源配置的別名也是Configuration類中進行了註冊
從原始碼中也能看出,實際上mybatis的幾種預設資料來源設定也是實現了DataSourceFactory
介面: