這篇文章學習的是mybatis的主配置文件Configuration.xml,這個配置文件主要配置一些全局的屬性,如數據庫的連接,類的別名,不同的

場景運行不同的配置等等。


一、Configuration.xml中可以配置的所有內容


configuration 配置
properties 屬性
settings 設置
typeAliases 類型命名
typeHandlers 類型處理器
objectFactory 對象工廠
plugins 插件
environments 環境
environment 環境變量
transactionManager 事務管理器
dataSource 數據源
映射器

 



二、Properties標簽

可以用來引用外部的屬性文件進行配置,比如所有的配置都在一個eas.properties中配置,只需要在properties中配置一次,就可以做到一次配置到處引用。

如現在配置一個eas.properties

 

  1. #db config 
  2. db.driver:com.sybase.jdbc3.jdbc.SybDriver 
  3. db.url:jdbc:sybase:Tds:192.168.2.143:2678/SMM_win2k8_portal 
  4. db.username:dba 
  5. db.password:smmsql 
  6.  
  7. #server config 
  8. server.url:http://192.168.2.101:8080/EAS 

在configuration.xml中對屬性文件中的值進行引用

 

 

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
  3. "http://mybatis.org/dtd/mybatis-3-config.dtd"> 
  4. <configuration> 
  5.     <properties resource="eas.properties" /> 
  6.      
  7.     <environments default="development"> 
  8.         <environment id="development"> 
  9.             <transactionManager type="JDBC"/> 
  10.             <dataSource type="POOLED"> 
  11.                 <property name="driver" value="${db.driver}"/> 
  12.                 <property name="url" value="${db.url}"/> 
  13.                 <property name="username" value="${db.username}"/> 
  14.                 <property name="password" value="${db.password}"/> 
  15.             </dataSource> 
  16.         </environment> 
  17.     </environments> 
  18. </configuration> 


 

三、Setteing標簽,對mybatis的一些行為進行設置



配置

<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="enhancementEnabled" value="false"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25000"/>
< /settings>


四、typeAliases 為一類設置別名,方便書寫


  1. <typeAliases> 
  2.     <!-- simple alias for full class name --> 
  3.     <typeAlias alias="App" type="com.justsy.eas.domain.App"/> 
  4.     <typeAlias alias="Content" type="com.justsy.eas.domain.Content"/> 
  5.     <typeAlias alias="AppDevice" type="com.justsy.eas.domain.AppDevice"/> 
  6.     <typeAlias alias="ListApp" type="com.justsy.eas.http.domain.ListApp"/> 
  7.     <typeAlias alias="ClientApp" type="com.justsy.eas.http.domain.ClientApp"/> 
  8. </typeAliases> 

java 中一些簡單類型的別名

 

別名  映射的類型
_byte  byte
_long  long
_short  short
_int   int 
_integer   int 
_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


五、typeHandlers 的作用是將Java類型與數據庫中類型進行匹配,在statement設值和ResultSet檢索值時可以正確的轉換,可以實現TypeHandler接口實現自己的類型處理器。mybatis中內建的類型處理器(Type Handler )



六、ObjectFactory    每次創建新的結果對象是調用這個ObjectFactory的對象來進行創建,它會比直接調用構造函數創建對象做更多的工作


七、plugins主要用來實現攔截器的功能,使用到了動態代理,可以指定在某些操作時執行一些攔截操作,比如在一條記錄插入數據庫之前寫入一條日志,或查詢一下

權限等等

?  Executor
(update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
?  ParameterHandler 
(getParameterObject, setParameters)
?  ResultSetHandler 
(handleResultSets, handleOutputParameters)
?  StatementHandler 
(prepare, parameterize, batch, update, query)


 

  1. // ExamplePlugin.java 
  2. @Intercepts({ @Signature(type = Executor.class, method = "update", args = { MappedStatement.class, Object.class }) }) 
  3. public class ExamplePlugin implements Interceptor { 
  4.     public Object intercept(Invocation invocation) throws Throwable { 
  5.         return invocation.proceed(); 
  6.     } 
  7.  
  8.     public Object plugin(Object target) { 
  9.         return Plugin.wrap(target, this); 
  10.     } 
  11.  
  12.     public void setProperties(Properties properties) { 
  13.     } 

  1. <plugins>  
  2.   <plugin interceptor="org.mybatis.example.ExamplePlugin">  
  3.     <property name="someProperty" value="100"/>  
  4.   </plugin>  
  5. </plugins>  

就會在所有執行update動作之前進行攔截,執行ExamplePlugin中自定義的一些邏輯

 

對select進行攔截的plugin

 

  1. import org.apache.ibatis.session.ResultHandler; 
  2. import org.apache.ibatis.session.RowBounds; 
  3.  
  4. @Intercepts({ @Signature(args = { MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class }, method = "query", type = Executor.class) }) 
  5. public class LogInterceptor implements Interceptor { 
  6.  
  7.     int index; 
  8.  
  9.     @Override 
  10.     public Object intercept(Invocation invocation) throws Throwable { 
  11.         System.out.println("some log!!!"); 
  12.         return invocation.proceed(); 
  13.     } 
  14.  
  15.     @Override 
  16.     public Object plugin(Object target) { 
  17.         System.out.println("1223--------------" + (index++)); 
  18.         return Plugin.wrap(target, this); 
  19.     } 
  20.  
  21.     @Override 
  22.     public void setProperties(Properties properties) { 
  23.  
  24.     } 

  1. <plugins> 
  2.     <plugin interceptor="com.akwolf.interceptor.LogInterceptor"> 
  3.     </plugin> 
  4.    </plugins> 


 

八、environments 對于一個應用可能連接多個數據庫,那就需要配置不同的環境來連接不同的數據庫,每一個SqlSessionFactory對應一個environments

也可以設置不同的環境應用于開發或測試的環境

如果環境被忽略,那么默認環境將會被加載,也就是default="development"的作用了


九、transactionManager設置事物的管理類型是 type=”[JDBC|MANAGED]”

JDBC使用datasource的連接來管理事物范圍。

MANAGED自己不進行事物的提交和回滾,依靠容器來管理事物,設置closeConnection為false,取消自動關閉連接

 

  1. <transactionManager type="MANAGED">  
  2.     <property name="closeConnection" value="false"/>  
  3. </transactionManager>  

十、dataSource設置數據源[UNPOOLED|POOLED|JNDI]

 

POOLED:每次被請求時簡單打開和關閉連接

POOLED:JDBC 連接對象的數據源連接池的實現,用來避免創建新的連接實例時必要的初始連接和認證時間。

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

poolMaximumIdleConnections –  任意時間存在的空閑連接數。

oolMaximumCheckoutTime –  在被強制返回之前,池中連接被檢查的時間。默認值: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(init ial——context))。這是個可選屬性,如果被忽略,那么data_source 屬性將 會直接以 init ialContext 為背景再次尋找。

data_source  –  這是引用數據源實例位置的上下文的路徑。它會以由 init ial_context查詢返回的環境為背景來查找,如果 init ial_context 沒有返回結果時,直接以初始上下 文為環境來查找。



十一、mappers用來注冊映射文件。