sqlMapConfig.xml配置文件详解
sqlMapConfig.xml配置文件詳解:?
Xml代碼
Xml代碼 ?
<??xml?version="1.0"?encoding="UTF-8"??>??
<!?DOCTYPE?sqlMapConfig??
PUBLIC?"-//iBATIS.com//DTD?SQL?Map?Config?2.0//EN"??
"http://www.ibatis.com/dtd/sql-map-config-2.dtd"?>??
<?sqlMapConfig?>??
???<?settings???
????cacheModelsEnabled?="true"??<!--是否啟用緩存機(jī)制--?>??
???lazyLoadingEnabled="true"??<!--?是否啟用延遲加載機(jī)制?-->??
???enhancementEnabled="true"??<!--?是否啟用字節(jié)碼增強(qiáng)機(jī)制?-->??
???errorTracingEnabled="true"??<!--?是否啟用錯(cuò)誤處理機(jī)制?-->??
???maxRequests="32"??<!--?最大并發(fā)請(qǐng)求數(shù)?-->??
???maxSessions="10"??<!--?最大Session數(shù)?-->??
???maxTransactions="5"??<!--?最大并發(fā)事務(wù)數(shù)?-->??
???useStatementNamespaces="true"/>??<!--?是否啟用名稱空間?-->??
???<?transactionManager??type?="JDBC"?>???<!--?定義了ibatis的事務(wù)管理器有3中(JDBC,JTA,EXTERNAL)?-->??
????<?dataSource??type?="SIMPLE"?>???<!--?type屬性指定了數(shù)據(jù)源的鏈接類型,也有3種類型(SIMPLE,DBCP,JNDI)?-->??
????????<?property??name?="JDBC.Driver"??value?="com.mysql.jdbc.Driver"?/>??
????????<?property??name?="JDBC.ConnectionURL"??value?="jdbc:mysql://localhost/test"?/>??
????????<?property??name?="JDBC.Username"??value?="root"?/>??
????????<?property??name?="JDBC.Password"??value?="wyq"?/>??
????????<?property??name?="Pool.MaximumActiveConnections"??value?="10"???/>???<!--?連接池維持的最大容量?-->??
????????<?property??name?="Pool.MaximumIdleConnections"??value?="5"?/>???<!--?連接池允許掛起的最大連接?-->??
????????<?property??name?="Pool.MaximumCheckoutTime"??value?="120000"?/>???<!--?連接被某個(gè)任務(wù)所允許占用的最大時(shí)間?-->??
????????<?property??name?="TimeToWait"??value?="500"?/>???<!--?線程允許等待的最大時(shí)間?-->??
??????
????</?dataSource?>??
??</?transactionManager?>??
??<?sqlMap??resource?="com/wyq/map/userMap.xml"?/>??
</?sqlMapConfig?>??
??? sqlMap節(jié)點(diǎn)指定了映射文件的位置,?配置文件中可以定義多個(gè)sqlMap元素,以指定項(xiàng)目內(nèi)所包含的所有映射文件.
?
?? <properties>元素的配置,它提供了允許在主配置文件之外的一個(gè)“名值對(duì)”列表,可以將其中的配置信息加載進(jìn)來,而這些配置信息可以放在任何一個(gè)地方。使用properties元素,其中有兩個(gè)屬性,分別是:resource和url。
??? 使用resource屬性時(shí),類加載器會(huì)從類路徑開始定位該資源;而使用url屬性時(shí),則是用java.net.URL類來處理的,提供一個(gè)有效的URL即可。之前的示例中,我們使用了resource屬性來配置數(shù)據(jù)庫連接信息,如:
?
Java代碼
<properties?resource="jdbc.properties"?/>??
Java代碼 ?
<properties?resource="jdbc.properties"?/>??
?而在jdbc.properties中,我們配置了數(shù)據(jù)庫的驅(qū)動(dòng)屬性,連接url,用戶名和密碼,這樣它們就可以被properties元素加載進(jìn)來,使用起來非常方便。而properties配置文件中是以“名值對(duì)”的方式存儲(chǔ)的,那么我們使用名稱即可引用,這是很多人都熟悉的語法,比如:${driver}就能獲取到com.mysql.jdbc.Driver,
?
一、 transactionManager節(jié)點(diǎn)
transactionManagerab 定義了ibatis的事務(wù)管理器,目前提供了以下幾種選擇:
1)? JDBC
??????????????????? 通過傳統(tǒng)JDBC Connection.commit/rollback實(shí)現(xiàn)事務(wù)支持.
2)? JTA
?????????????????? 使用容器提供的JTA服務(wù)實(shí)現(xiàn)全局事務(wù)管理.
3)? EXTERNAL
???????????????? 外部事務(wù)管理,如在EJB中使用ibatis,通過EJB的部署配置即可實(shí)現(xiàn)自動(dòng)的事務(wù)管理機(jī)制.此時(shí)ibatis將把所有事務(wù)委托給外部容器進(jìn)行管理.此外,通過Spring等輕量級(jí)容量實(shí)現(xiàn)事務(wù)的配置化管理也是一個(gè)不錯(cuò)的選擇.?
二?dataSource?節(jié)點(diǎn)
dataSource 從屬于 transactionManager, 用于設(shè)定ibatis運(yùn)行期使用DataSource屬性.
??? type 屬性: dataSource 元素的 type 屬性指定了 dataSource 的實(shí)現(xiàn)類型.可選項(xiàng)目:
1)? SIMPLE:
SIMPLE 是 ibatis 內(nèi)置的 dataSource 實(shí)現(xiàn),其中實(shí)現(xiàn)了一個(gè)簡單的數(shù)據(jù)庫連接池機(jī)制,對(duì)應(yīng) ibatis 實(shí)現(xiàn)類為
com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory.
JDBC 使用 數(shù)據(jù)庫自己的事務(wù)(局部事務(wù)),connect.beginTranstion(), connect.commit()等.
2)? DBCP
基于Apache DBCP連接池組件實(shí)現(xiàn)的DataSource封裝,當(dāng)無容器提供DataSource服務(wù)時(shí),建議使用該選項(xiàng),對(duì)應(yīng)ibatis實(shí)現(xiàn)類為
com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory.
JTA : 使用jta 事務(wù)管理器管理事務(wù)(全局事務(wù)),使用userTranstion對(duì)象.
3)? JNDI
使用J2EE容器提供的DataSource實(shí)現(xiàn), DataSource將通過指定的JNDI Name從容器中獲取.對(duì)應(yīng)ibatis實(shí)現(xiàn)類為
com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory.
Ibatis 不控制事務(wù),事務(wù)交由外部控制,一般在CTM,或spring托管事務(wù)中使用.?
JNDI的配置大部分都在應(yīng)用服務(wù)器中進(jìn)行,所以在ibatis中的配置相對(duì)簡單
?
(1)jdbc事務(wù)控制的JNDI配置
??
Xml代碼
Xml代碼 ?
<?transctionManager??type?="JDBC"?>??
?????<?dataSource??type?="JNDI"?>??
???????????<?property??name?="DataSource"??value?="java:comp/env/jdbc/myDataSource"?/>??
?????</?dataSource?>??
</?transctionManager?>??
?
?
?
(2)JTA事務(wù)控制的JNDI配置
??
Xml代碼
Xml代碼 ?
<?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?>??
?
<!--?
maxRequests?
同時(shí)執(zhí)行 SQL 語句的最大線程數(shù)。大于這個(gè)值的線程將阻塞直到另一個(gè)線程執(zhí)行完成。不同的 DBMS有不同的限制值,但任何數(shù)據(jù)庫都有這些限制。通常這個(gè)值應(yīng)該至少是maxTransactions(參見以下)的 10 倍,并且總是大于 maxSessions 和maxTranactions。減小這個(gè)參數(shù)值通常能提高性能。?
例如:maxRequests=“256”?
缺省值:512?
maxSessions?
同一時(shí)間內(nèi)活動(dòng)的最大 session 數(shù)。一個(gè) session 可以maxSessions是代碼請(qǐng)求的顯式 session,也可以是當(dāng)線程使用SqlMapClient 實(shí)例(即執(zhí)行一條語句)自動(dòng)獲得的session。它應(yīng)該總是大于或等于 maxTransactions 并小于 maxRequests。減小這個(gè)參數(shù)值通常能減少內(nèi)存使用。?
例如:maxSessions=“64”?
缺省值:128?
maxTransactions?
同時(shí)進(jìn)入 SqlMapClient.startTransaction()的最大線程maxTransactions 數(shù)。大于這個(gè)值的線程將阻塞直到另一個(gè)線程退出。不同的 DBMS 有不同的限制值,但任何數(shù)據(jù)庫都有這些限制。這個(gè)參數(shù)值應(yīng)該總是小于或等于maxSessions 并總是遠(yuǎn)遠(yuǎn)小于 maxRequests。減小這個(gè)參數(shù)值通常能提高性能。?
例如:maxTransactions=“16”?
缺省值:32?
cacheModelsEnabled?
全局性地啟用或禁用 SqlMapClient 的所有緩存cacheModelsEnabled model。調(diào)試程序時(shí)使用。?
例如:cacheModelsEnabled=“true”?
缺省值:true(啟用)?
lazyLoadingEnabled?
全局性地啟用或禁用SqlMapClient的所有延遲加載。lazyLoadingEnabled 調(diào)試程序時(shí)使用。?
例子:lazyLoadingEnabled=“true”?
缺省值:true(啟用)?
enhancementEnabled?
全局性地啟用或禁用運(yùn)行時(shí)字節(jié)碼增強(qiáng),以優(yōu)化訪enhancementEnabled?
問Java Bean屬性的性能,同時(shí)優(yōu)化延遲加載的性能。?
例子:enhancementEnabled=“true”?
缺省值:false(禁用)?
useStatementNamespaces?
如果啟用本屬性,必須使用全限定名來引用 mapped useStatementNamespaces?
statement。Mapped statement 的全限定名由 sql-map 的名稱和 mapped-statement 的名稱合成。例如: queryForObject("sqlMapName.statementName");?
例如:useStatementNamespaces=“false”?
缺省值:false(禁用)?
defaultStatementTimeout?
此設(shè)置值必須為一個(gè)整數(shù),作為JDBC連接超時(shí)的時(shí)間,這個(gè)值可以被任意一個(gè)映射文件的statement屬性來重新設(shè)置,?
如果沒有指明,查詢將無超時(shí)時(shí)間限制除非在映射文件中設(shè)置statement屬性值。被設(shè)置的值以秒為單位等待連接失效?
??
classInfoCacheEnabled?
With this setting enabled, iBATIS will maintain a cache of introspected?
classes. This will lead to a significant reduction in startup time if many?
classes are reused.?
例如: classInfoCacheEnabled=“true”?
缺省值: true (啟用)?
statementCachingEnabled (iBATIS 2.3.0以后版本中有)?
With this setting enabled, iBATIS will maintain a local cache of?
prepared statements. This can lead to significant performance?
improvements.?
例如: statementCachingEnabled=“true”?
缺省值: true (啟用)?
-->
總結(jié)
以上是生活随笔為你收集整理的sqlMapConfig.xml配置文件详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 企业级WEB的负载均衡高可用之LVS+K
- 下一篇: iOS SDK具体解释之UIDevice