mybatis配置文件詳解

初次學習mybatis的時候,配置文件的節點挺多的,都不知道什麼意思,能不能換其餘的屬性值,他們的優勢在哪兒?他們在什麼狀況下使用?它們各自的區別?帶着這些個問題因而我就寫了這篇博客。有什麼不對或錯誤的地方,請你們竭盡全力的指正,謝謝。java

1.事務管理機制

1.ibatis的配置文件中dataSource節點有這麼個配置<datasource type=」SIMPlE」></datasource>,根據原文下的解釋知道其中typeSIMPLEDBCPJNDI三種。我想問下這三種類型的區別在於哪裏,在什麼狀況下用到,經常使用的是哪一個,及它們各自的優勢。mysql

 

看狀況,simple用於測試dbcp是採用dbcp作數據源jndi是使用app server提供的數據源。通常來講,在實際應用中jndi用的比較多simple用於測試。不過,多說一句,datasource通常都是在spring集成或管理,因此和spring集成時,不多使用ibatisdataSource節點web

 

2.<transactionManager type=」JDBC」></transactionManager>這個配置中type也有JDBCJTAEXTERNAL。我想問下基於JDBC,及JTA的事務能夠應用到哪一種程度,而對EXTERNAL在什麼狀況下會用到?

 

JDBC:使用數據庫本身的事務(局部事務)connect.beginTranstion()connect.commit()spring

JTA:使用jta事務管理器管理事務(全局事務),使用userTranstion對象sql

External:本身(Ibatis)不控制事務,事物都是spring託管的,若是不是,那就用JDBC,若是在app server中,你又不想使用容器託管事務,那就用JTA數據庫

 

3.在開發指南中提到」ibatis」的緩存機制使用必須特別謹慎,我想問下,ibatiscache用到的地方大不大,若是不用會出現那些很差的狀況,由於我知道hibernate中的緩存機制是他的一個亮點,那ibatis中又是怎麼樣呢?

 

基本上用處不大(可能會有不少人和個人觀點不一樣)緩存

Ibatissql拼裝器強調的是直接與數據庫打交道sql的質量決定了最好的效率,再說數據庫自己提供的cache類型many to onemany to manyone to onehibernate的產物,能夠直接作成視圖,在使用ibatis去查詢,這樣能夠充分的使用db本身的cache服務器

 

 

</ dataSource >mybatis

    </ transactionManager >app

    < sqlMap  resource ="com/wyq/map/userMap.xml" />

 </ sqlMapConfig >

 

JNDI配置大部分都在應用服務器中進行,因此在ibatis中的配置相對簡單

(1)JDBC事務控制JNDI配置

< transctionManager  type ="JDBC" >

          < dataSource  type ="JNDI" >

              < property  name ="DataSource"  value ="java:comp/env/jdbc/myDataSource" />

          </ dataSource >

      </ transctionManager >

 

(2)JTA事務控制JNDI配置

< transctionManager  type ="JTA" >

          < property  name ="UserTransaction"  value ="java:/ctx/con/UserTransaction" />

          < dataSource  type ="JNDI" >

              < property  name ="DataSource"  value ="java:comp/env/jdbc/myDataSource" />

          </ dataSource >

      </ transctionManager >

 

2.dataSource 元素使用基本的 JDBC 數據源接口來配置 JDBC 鏈接對象的資源。三種數據源類型  type=???

 

*許多MyBatis的應用程序將會按示列中的例子來配置數據源。然而它並非必須的。要知道爲了方便使用延遲加載,數據源纔是必須的。

 

2.1UNPOOLED-這個數據源的實現是每次被請求簡單打開關閉鏈接。它有一點慢,這是對簡單應用程序的一個很好的選擇,由於他不須要及時可用鏈接。不一樣的數據庫對這個的表現也是不同的,因此對某些數據庫來上配置數據源並不重要,這個配置也是閒置的。UNPOOLED類型的數據源僅僅用來配置一下五種屬性

 

2.1.1*driver-這是JDBC驅動的java類的徹底限定名(若是你的驅動包包含,他也不是數據源類)

 

2.1.2*url-這是數據庫的JDBC URL地址

 

2.1.3*username-登陸數據庫的用戶名

 

2.1.4*password-登陸數據庫的密碼

 

2.1.5*defaultTransactionIsolationLevel-默認的鏈接事務隔離級別

 

*做爲可選項,你能夠傳遞數據庫驅動的屬性。要這樣作,屬性的前綴是以」driver.」開頭的,列如:

 *driver.encoding=UTF-8

這樣就會傳遞以值」UTF-8」來傳遞屬性」encoding」,它是經過DriverManager.getConnection(url,driverProperties)方法傳遞給數據庫驅動。

 

 

2.2POOLED-這是JDBC鏈接對象數據源鏈接池實現,用來避免建立新的鏈接實例時必要的初始鏈接認證時間。這是一種當前web應用程序用來快速響應請求流行的方法。

除了上述(UNPOOLED)的屬性以外,還有不少屬性能夠用來配置POOLED數據源

 

2.2.1*poolMaximumActiveConnections-在任意時間存在的活動(也就是正在使用)鏈接的數量。默認值:10

2.2.2*poolMaximumIdleConnections-任意時間存在的空閒鏈接數

2.2.3*poolMaximumCheckoutTime-在被強制返回以前,池中鏈接被檢查的時間。默認值:20000毫秒(也就是20秒)

2.2.4*poolTimeToWait-這是給鏈接池一個打印日誌狀態機會的低層次設置,還有從新嘗試得到鏈接,這些狀況下每每須要很長時間。(爲了不鏈接池沒有配置時靜默失敗)。默認值:20000毫秒(也就是20秒)

2.2.5*poolPingQuery-發送到數據的偵測查詢,用來驗證鏈接是否正常工做,而且準備接收請求。默認是」NO PING NO QUERY SET」,這會引起許多數據庫驅動鏈接有一個錯誤信息而致使失敗。

2.2.6*poolPingEnabled-這是開啓或禁止偵測查詢。若是開啓,你必須用一個合法的SQL語句(最好是很快速的)設置poolPingQuery屬性。默認值:false。

2.2.7*poolPingConnectionsNotUsedFor-這是用來配置poolPingQuery屢次時間被用一次。這能夠被設置匹配標準的數據庫鏈接超時時間,來避免沒必要要的偵測。默認值:0(也就是全部鏈接每一時刻都被偵測-但僅僅當poolPingEnabled爲true時適用)。

 

2.3JNDI-這個數據源的實現是爲了使用如Spring這類的容器容器能夠集中或在外部配置數據源,而後放置一個JNDI上下文的引用。這個數據源配置只須要兩個屬性:

 

2.3.1*initial_context-這個屬性用來從初始上下文中尋找環境(也就是initial Context.lookup(initial--context)。這是個可選屬性,若是被忽略,那麼data_source屬性將會直接以initialCotext爲背景再次尋找)。

2.3.2*data_source-這是引用數據源實例位置的上下文的路徑。它會以由initial_context查詢返回的環境爲背景來查找,若是initial_Context沒有返回結果時,直接初始上下文環境來查找。

和其餘數據源配置類似,他也能夠經過名爲」env.」的前綴直接向上下文發送屬性。好比:

 

*env.encoding=UTF-8

在初始化以後,這就會以值」UTF-8」向初始上下文的構造方法傳遞名」encoding」的屬性。

 

3.configuration配置詳解

 3.1configuration有什麼做用?

configuration管理MyBatis的配置MyBatis全部配置信息都存放的在configuration中。

 

下面咱們看看configuration可配置的屬性有哪些:

3.1.1*properties屬性

實例:

 

1   <properties resource="org/mybatis/example/config.properties">   
2 <property name="username" value="dev_user"/>   
3 <property name="password" value="F2Fa3!33TYyg"/>   
4 </properties>
View Code

 

這些都是外部化的,可替代的屬性。其中的屬性就能夠再整個配置文件中使用,使用可替換的屬性來實現動態配置,以下

1 <dataSource type="POOLED">   
2 <property name="driver" value="${driver}"/>   
3 <property name="url" value="${url}"/>   
4 <property name="username" value="${username}"/>   
5 <property name="password" value="${password}"/>   
6 </dataSource>   
View Code

 

若是這些地方屬性多餘一個,沒MyBatis按照下面的順序加載: 

properties元素體內指定的屬性首先被讀取。

從類路徑下資源或者properties元素的eurl屬性中加載的屬性第二被讀取,它會覆蓋已經存在的徹底同樣的屬性。

做爲方法參數船傳遞的屬性最後被讀取,他會覆蓋任一已存在的徹底同樣的屬性。

 

3.1.2 *setings

這些是很是重要的屬性,他會修改MyBatis運行時的行爲方式。若是不熟悉配置建議使用默認配置

實例:

 1 <settings>   
 2 <setting name="cacheEnabled" value="true"/>   
 3 <setting name="lazyLoadingEnabled" value="true"/>   
 4 <setting name="multipleResultSetsEnabled" value="true"/>   
 5 <setting name="useColumnLabel" value="true"/>   
 6 <setting name="useGeneratedKeys" value="false"/>   
 7 <setting name="enhancementEnabled" value="false"/>   
 8 <setting name="defaultExecutorType" value="SIMPLE"/>   
 9 <setting name="defaultStatementTimeout" value="25000"/>   
10 </settings> 
11  
12 <settings>
13 <setting name="cacheEnabled" value="true"/>
14 <setting name="lazyLoadingEnabled" value="true"/>
15 <setting name="multipleResultSetsEnabled" value="true"/>
16 <setting name="useColumnLabel" value="true"/>
17 <setting name="useGeneratedKeys" value="false"/>
18 <setting name="enhancementEnabled" value="false"/>
19 <setting name="defaultExecutorType" value="SIMPLE"/>
20 <setting name="defaultStatementTimeout" value="25000"/>
21 </settings>
View Code

 

 

3.1.2.1參數表格: 

設置參數

描述

有效值

默認值

cacheEnabled

這個配置使全局的映射器啓用或禁用緩存。

 

True| false

True

lazyLoadingEnabled

 

全局啓用或禁用延遲加載。當禁用時,全部關聯對象都會即時加載。

 

True| false

True

aggressiveLazyLoading

 

當啓用時,有延遲加載屬性的對象在被調用時將會徹底加載任意屬性。不然,每種屬性將會按須要加載。

True| false

True

multipleResultSetsEnabled

 

容許或不容許多種結果集從一個單獨的語句中返回(須要適合的驅動)。

 

True|false

True

useColumnLabel

使用列標籤代替列名。不一樣的驅動在這方便表現不一樣。參考驅動文檔或充分測試兩種方法來決定所使用的驅動。

True|false

True

useGeneratedKeys

容許JDBC支持生成的鍵。須要適合的驅動。若是設置爲true則這個設置強制生成的鍵被使用,儘管一些驅動拒絕兼容但仍然有效(好比Derby)。

True|false

True

autoMappingBehavior

指定MyBatis如何自動映射列到字段/屬性。PARTIAL只會自動映射簡單,沒有嵌套的結果。FULL會自動映射任意複雜的結果(嵌套的或其餘狀況)

NONE,

PARTIAL,

FULL

 

PARTIAL

 

 

這些都是外部化的,可替代的屬性。其中的屬性就能夠再整個配置文件中使用,使用可替換的屬性來實現動態配置,以下

3.1.3typeAliases類型命名

實例:

1   <typeAliases>   
2 <typeAlias alias="Author" type="domain.blog.Author"/>   
3 <typeAlias alias="Blog" type="domain.blog.Blog"/>   
4 <typeAlias alias="Comment" type="domain.blog.Comment"/>   
5 <typeAlias alias="Post" type="domain.blog.Post"/>   
6 <typeAlias alias="Section" type="domain.blog.Section"/>   
7 <typeAlias alias="Tag" type="domain.blog.Tag"/>   
8 </typeAliases> 
View Code

 

別名是爲Java類型命名一個短的名字。它只用在XML配置文件裏,用來減小類徹底限定名的多餘部分。例如在配置文件裏須要使用domain.blog.Author的地方能夠簡單的使用Author替換。

對於普通的java類型,有不少的內建的別名。(大小寫不敏感),以下

 

別名

映射類型

_byte

Byte

_long

Long

_int

Int

_integer

Integer

_double

Double

_float

Float

_boolean

Boolean

string

String

byte

Byte

long

Long

short

Short

int

Integer

integer

Integer

double

Double

float

Float

boolean

Boolean

date

Date

decimal

BigDecimal

bigDecimal

BigDecimal

object

Object

map

Map

hashmap

HashMap

list

List

arraylist

ArrayList

collection

Collection

iterator

Iterator

 

 

3.1.4typeHandlers類型處理器

實例:

1 <typeHandlers>   
2 <typeHandler javaType="String" jdbcType="VARCHAR" handler="org.mybatis.example.ExampleTypeHandler"/>   
3 </typeHandlers>  
View Code

 

 

3.1.5plugins插件

實例:

 1 <plugins>   
 2 <plugin interceptor="org.mybatis.example.ExamplePlugin">   
 3 <property name="someProperty" value="100"/>   
 4 </plugin>   
 5 </plugins>  
 6 <plugins>
 7 <plugin interceptor="org.mybatis.example.ExamplePlugin">
 8 <property name="someProperty" value="100"/>
 9 </plugin>
10 </plugins>
View Code

 

插件能夠改變某些類的執行, MyBatis容許被插件來攔截的類有: 

1 Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)   
2 ParameterHandler (getParameterObject, setParameters)   
3 ResultSetHandler (handleResultSets, handleOutputParameters)   
4 StatementHandler (prepare, parameterize, batch, update, query)  
5 Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
6 ParameterHandler (getParameterObject, setParameters)
7 ResultSetHandler (handleResultSets, handleOutputParameters)
8 StatementHandler (prepare, parameterize, batch, update, query)
View Code

 

 

3.1.6environments環境

environments裏能夠配置多個environment,每一個environment對應一個數據庫環境。一個完整的定義以下:

 1 <environments default="development">   
 2 <environment id="development">   
 3 <transactionManager type="JDBC">   
 4 </transactionManager>   
 5 <dataSource type="POOLED">   
 6 <property name="driver" value="${driver}"/>   
 7 <property name="url" value="${url}"/>   
 8 <property name="username" value="${username}"/>   
 9 <property name="password" value="${password}"/>   
10 </dataSource>   
11 </environment>   
12 </environments>  
View Code

詳解結束,mybatis中配置的節點其實就是挺多的,不是很麻煩,就是多。

相關文章
相關標籤/搜索