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