mybatis學習總結-核心配置文件mybatis-config.xml

http://ju.outofmemory.cn/entry/94634mysql

 

在 mybatis初體驗 中,在mybatis-config.xml中有這樣的配置:spring

    <!-- 對事務的管理和鏈接池的配置 -->  
    <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。sql

由於有這些場景:數據庫

1)爲了開發設置不一樣的數據庫配置服務器

2)測試和生產環境數據庫不一樣mybatis

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

 

咱們能夠配置幾個數據庫配置,咱們能夠這樣:測試

 <!-- 對事務的管理和鏈接池的配置 -->  
    <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)ui

 <environments default="oracle_jdbc">

 

咱們每一個數據庫,對應一個SqlSessionFactory,能夠明確的獲取哪個數據庫的SqlSessionFactory。url

根據數據庫環境,獲取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 任意時間存在的空閒鏈接數
poolMaximumCheckoutTime 在被強制返回以前,鏈接池中被檢查的時間,默認值爲20000毫秒
poolTimeToWait 給鏈接池一個打印日誌狀態機會的低層次設置,還有從新嘗試獲取鏈接,這些狀況每每會須要很長時間。爲了不鏈接池沒有配置時靜默失敗。默認值20000毫秒
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
相關文章
相關標籤/搜索