mybatis-配置文件mybatis-config.xml


在mybatis-config.xml中有初始的配置:

 <!-- 對事務的管理和連接池的配置 -->  
    <environments default="development">  
        <environment id="development">  
            <transactionManager type="JDBC" />  
            <dataSource type="POOLED">  
                <property name="driver" value="${jdbc.driverClassName}" />  
                <property name="url" value="${jdbc.url}" />  
                <property name="username" value="${jdbc.username}" />  
                <property name="password" value="${jdbc.password}" />   
            </dataSource>  
        </environment>  
    </environments>

 

從這可以看出,environments主要用於配置數據庫相關,而且可以在里面配置多個environment。

因為有這些場景:

1)為了開發設置不同的數據庫配置

2)測試和生產環境數據庫不同

3)有多個數據庫卻共享相同的模式,即對不同的數據庫使用相同的SQL映射

我們可以配置幾個數據庫配置,我們可以這樣:

<!-- 對事務的管理和連接池的配置 -->  
    <environments default="oracle_jdbc">  
        <environment id="oracle_jdbc">  
            <transactionManager type="JDBC" />  
            <dataSource type="POOLED">  
                <property name="driver" value="${jdbc.oracle.driverClassName}" />  
                <property name="url" value="${jdbc.oracle.url}" />  
                <property name="username" value="${jdbc.oracle.username}" />  
                <property name="password" value="${jdbc.oracle.password}" />   
            </dataSource>  
        </environment>  
        
        <environment id="mysql_jdbc">  
            <transactionManager type="JDBC" />  
            <dataSource type="POOLED">  
                <property name="driver" value="${jdbc.mysql.driverClassName}" />  
                <property name="url" value="${jdbc.mysql.url}" />  
                <property name="username" value="${jdbc.mysql.username}" />  
                <property name="password" value="${jdbc.mysql.password}" />   
            </dataSource>  
        </environment> 
    </environments>

 

用default指定默認的數據庫鏈接:(這里默認oracle)

<environments default="oracle_jdbc">

 

我們每個數據庫,對應一個SqlSessionFactory,可以明確的獲取哪一個數據庫的SqlSessionFactory。

根據數據庫環境,獲取SqlSessionFactory:

SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, environment);
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, environment,properties); 
 

 

我們的每個數據庫信息都定義在environment中,我們看下這下面的配置:

1.transactionManager

 

示例配置:

<transactionManager type="JDBC" />
 

type取值范圍:

JDBC:簡單的使用JDBC的提交和回滾設置,一覽與從數據員得到的鏈接來管理事務范圍

MANAGED:這個配置幾乎什么都沒做,它從來不提交或回滾一個鏈接,而它讓容器來管理事務的整個生命周期(比如spring、jee應用服務器的上下文)

在默認情況下,MANAGED會關閉連接,如果有時候不希望這樣時,可以從連接中停止它,將claseConnection屬性設置為false:

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

 

2.dataSource

用來配置基本的JDBC數據源連接信息

示例配置:

<dataSource type="POOLED">  
   <property name="driver" value="${jdbc.mysql.driverClassName}" />  
   <property name="url" value="${jdbc.mysql.url}" />  
   <property name="username" value="${jdbc.mysql.username}" />  
   <property name="password" value="${jdbc.mysql.password}" />   
</dataSource>

 

type取值范圍:

UNPOOLED:這個數據源的實現是每次被請求時打開和關閉連接。速度會有一些慢,適用於簡單的應用程序。

這種類型的數據源只需要配置下面的6種屬性(最后一項為可選):

driver JDBC驅動名
url JDBC URL地址
username 數據庫用戶名
password 數據庫密碼
defaultTransactionIsolationLevel 默認的鏈接事務隔離級別
driver.encoding utf-8(可選項)

 

POOLED:這是JDBC鏈接對象的數據源連接池的實現,用來避免創建新的鏈接實例時必要的連接和認證時間。適用於當前Web應用程序用來快速響應請求

這種類型的數據源除了需要配置UNPOOLED中的基礎配置外,還可以配置下面的內容:

poolMaximumActiveConnections 在任意時間正在使用鏈接的數量
poolMaximumIdleConnections 任意時間存在的空閑連接數,經驗值建議設置在與poolMaximumActiveConnections相同即可
poolMaximumCheckoutTime 獲取鏈接時如果沒有idleConnection同時activeConnection達到最大值,則從activeConnections列表第一個鏈接開始,檢查是否超過該設置的時間,如果超過,則被強制失效,返回鏈接。默認值為20000毫秒,建議設置在預期最大的SQL執行時間。
poolTimeToWait 給連接池一個打印日志狀態機會的低層次設置,還有重新嘗試獲取連接,這些情況往往會需要很長時間。為了避免連接池沒有配置時靜默失敗。默認值20000毫秒,建議默認設置。
poolPingQuery 發送到數據的偵測查詢,用來驗證連接是否正常工作,並且准備接受請求。默認為“NO PING QUERY SET”,這會引起許多數據庫驅動連接由一個錯誤信息而導致失敗,建議使用select 1,開銷小
poolPingEnabled 這是開啟或禁用偵測查詢,如果開啟,必須用一個合法的SQL語句,設置poolPingQuery屬性,默認值為false,建議啟用,防止服務器端異常關閉,導致客戶端錯誤。
poolPingConnectionsNotUsedFor 用來配置poolPingQuery多長時間被調用一次。可以被設置匹配標准的數據庫鏈接超時時間,來避免不必要的偵測。默認值0(也就是所有鏈接每一時刻都被偵測到,但僅僅當poolPingEnabled為true時適用)。建議小於服務器端超時時間,MySQL默認超時是8小時。

 

 

JNDI:這個數據源是為了使用如Spring或應用服務器這類的容器,容器可以集中或在外部配置數據源,然后設置JNDI上下文的引用。

這個數據源只需要配置兩個屬性:

initial_context 用來從初始上下文中尋找環境(也就是initialContext.lookup(initial——context)),這是個可選屬性,如果被忽略,那么data_source屬性將直接以initialContext為背景再次尋找
data_source 這是引用數據源實例位置的上下文的路徑,它會以initial_context查詢返回的環境為背景來查找,如果initial_context沒有返回結果時,直接以初始上下文為環境來查找。

和其他數據源配置類似,他可以通過名“env.”的前綴來直接向初始上下文發送屬性,比如:

env.encoding=UTF8

 

 

原文轉自《mybatis學習總結-核心配置文件mybatis-config.xml(二)》,稍有修改和注解。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM