1. 程式人生 > >Mybatis配置檔案: enviroments執行環境自行理解

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,每個environmentid屬性作為唯一標識。通過environmentsdefault屬性指定當前資料庫執行環境。
environment標籤中必須得有transactionManagerdataSource兩個子標籤。
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);
    //...
}

JdbcTransactionFactoryManagedTransactionFactory都實現了TransactionFactory介面:

JdbcTransactionFactory
ManagedTransactionFactory

按照配置檔案,其根標籤的configuration對應Configuration類,在configuration類中構造器中註冊了JdbcTransactionFactory和ManagedTransactionFactory的別名
configuration

dataSource標籤配置了對應的資料庫配置,例如資料來源連線型別等。在mybatis中dataSource的type屬性可以選擇有以下幾種值:JNDI | POOLED | UNPOOLED | 自定義資料來源

  • 指定POOLED後,mybatis則採用自帶預設的資料來源進行資料庫連線管理。
  • 指定UNPOOLED後,mybatis則不採用資料來源連線資料庫。每次連線都建立新的會話,結束後銷燬會話(銷燬會話需要自己手動)。
  • 指定JNDI 後,mybatis則採用JNDI來管理資料庫連線。
  • 自定義資料來源: 當我們想採用第三方資料來源管理資料庫連線時,mybatis允許我們通過實現DataSourceFactory介面來自定義資料來源設定。

在mybatis中,資料來源配置的別名也是Configuration類中進行了註冊
資料來源配置的別名註冊
從原始碼中也能看出,實際上mybatis的幾種預設資料來源設定也是實現了DataSourceFactory介面:
資料來源設定