transactionManager
在 MyBatis 中有兩種事務管理器類型(也就是 type=”[JDBC|MANAGED]”):
- JDBC – 這個配置直接簡單使用了 JDBC 的提交和回滾設置。 它依賴於從數據源得 到的連接來管理事務范圍。
- MANAGED – 這個配置幾乎沒做什么。它從來不提交或回滾一個連接。而它會讓 容器來管理事務的整個生命周期(比如 Spring 或 JEE 應用服務器的上下文) 默認 情況下它會關閉連接。 然而一些容器並不希望這樣, 因此如果你需要從連接中停止 它,將 closeConnection 屬性設置為 false。例如:
<transactionManager type="MANAGED"> <property name="closeConnection" value="false"/> </transactionManager>
NOTE If you are planning to use MyBatis with Spring there is no need to configure any TransactionManager because the Spring module will set its own one overriding any previously set configuration.
這兩種事務管理器都不需要任何屬性。然而它們都是類型別名,要替換使用它們,你需 要放置將你自己的類的完全限定名或類型別名,它們引用了你對 TransactionFactory 接口的實現 類。
public interface TransactionFactory { void setProperties(Properties props); Transaction newTransaction(Connection conn); Transaction newTransaction(DataSource dataSource, TransactionIsolationLevel level, boolean autoCommit); }
任何在 XML 中配置的屬性在實例化之后將會被傳遞給 setProperties()方法。 你的實現類 需要創建一個事務接口的實現,這個接口也很簡單:
public interface Transaction { Connection getConnection() throws SQLException; void commit() throws SQLException; void rollback() throws SQLException; void close() throws SQLException; }
使用這兩個接口,你可以完全自定義 MyBatis 對事務的處理。
dataSource
dataSource 元素使用基本的 JDBC 數據源接口來配置 JDBC 連接對象的資源。
- 許多 MyBatis 的應用程序將會按示例中的例子來配置數據源。 然而它並不是必須的。 要知道為了方便使用延遲加載,數據源才是必須的。
有三種內建的數據源類型(也就是 type=”???”):
UNPOOLED – 這個數據源的實現是每次被請求時簡單打開和關閉連接。它有一點慢, 這是對簡單應用程序的一個很好的選擇, 因為它不需要及時的可用連接。 不同的數據庫對這 個的表現也是不一樣的, 所以對某些數據庫來說配置數據源並不重要, 這個配置也是閑置的。 UNPOOLED 類型的數據源僅僅用來配置以下 5 種屬性:
- driver – 這是 JDBC 驅動的 Java 類的完全限定名(如果你的驅動包含,它也不是 數據源類)。
- url – 這是數據庫的 JDBC URL 地址。
- username – 登錄數據庫的用戶名。
- password – 登錄數據庫的密碼。
- defaultTransactionIsolationLevel – 默認的連接事務隔離級別。
作為可選項,你可以傳遞數據庫驅動的屬性。要這樣做,屬性的前綴是以“driver.”開 頭的,例如:
- driver.encoding=UTF8
這 樣 就 會 傳 遞 以 值 “ UTF8 ” 來 傳 遞 屬 性 “ encoding ”, 它 是 通 過 DriverManager.getConnection(url,driverProperties)方法傳遞給數據庫驅動。
POOLED – 這是 JDBC 連接對象的數據源連接池的實現,用來避免創建新的連接實例 時必要的初始連接和認證時間。這是一種當前 Web 應用程序用來快速響應請求很流行的方 法。
除了上述(UNPOOLED)的屬性之外,還有很多屬性可以用來配置 POOLED 數據源:
- poolMaximumActiveConnections – 在任意時間存在的活動(也就是正在使用)連 接的數量。默認值:10
- poolMaximumIdleConnections – 任意時間存在的空閑連接數。
- poolMaximumCheckoutTime – 在被強制返回之前,池中連接被檢查的時間。默認 值:20000 毫秒(也就是 20 秒)
- poolTimeToWait – 這是給連接池一個打印日志狀態機會的低層次設置,還有重新 嘗試獲得連接, 這些情況下往往需要很長時間 為了避免連接池沒有配置時靜默失 敗)。默認值:20000 毫秒(也就是 20 秒)
- poolPingQuery – 發送到數據的偵測查詢,用來驗證連接是否正常工作,並且准備 接受請求。默認是“NO PING QUERY SET” ,這會引起許多數據庫驅動連接由一 個錯誤信息而導致失敗。
- poolPingEnabled – 這是開啟或禁用偵測查詢。如果開啟,你必須用一個合法的 SQL 語句(最好是很快速的)設置 poolPingQuery 屬性。默認值:false。
- poolPingConnectionsNotUsedFor – 這是用來配置 poolPingQuery 多次時間被用一次。 這可以被設置匹配標准的數據庫連接超時時間, 來避免不必要的偵測。 默認值: 0(也就是所有連接每一時刻都被偵測-但僅僅當 poolPingEnabled 為 true 時適用)。
JNDI – 這個數據源的實現是為了使用如 Spring 或應用服務器這類的容器, 容器可以集 中或在外部配置數據源,然后放置一個 JNDI 上下文的引用。這個數據源配置只需要兩個屬 性:
- initial_context – 這 個 屬 性 用 來 從 初 始 上 下 文 中 尋 找 環 境 ( 也 就 是 initialContext.lookup(initial——context) 。這是個可選屬性,如果被忽略,那么 data_source 屬性將會直接以 initialContext 為背景再次尋找。
- data_source – 這是引用數據源實例位置的上下文的路徑。它會以由 initial_context 查詢返回的環境為背景來查找,如果 initial_context 沒有返回結果時,直接以初始 上下文為環境來查找。
和其他數據源配置相似, 它也可以通過名為 “env.” 的前綴直接向初始上下文發送屬性。 比如:
- env.encoding=UTF8
在初始化之后,這就會以值“UTF8”向初始上下文的構造方法傳遞名為“encoding” 的屬性。