电竞比分网-中国电竞赛事及体育赛事平台

分享

Ibatis2.0使用說明(二)——配置篇(1)

 WindySky 2009-04-20
一、 SQL Map XML 配置文件
SQL Map 使用XML 配置文件集中的配置不同的設(shè)置屬性,包括DataSource 的詳細配置信息,SQL Map 和其他可選屬性,如線程管理等。以下是SQL Map 配置文件的一個例子:
SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www./dtd/sql-map-config-2.dtd">
<!-- Always ensure to use the correct XML header as above! -->
<sqlMapConfig>
<!-- The properties (name=value) in the file specified here can be used placeholders in this config
file (e.g. "${driver}". The file is relative to the classpath and is completely optional. -->
<properties resource=" examples/sqlmap/maps/SqlMapConfigExample.properties " />
<!-- These settings control SqlMapClient configuration details, primarily to do with transaction
management. They are all optional (more detail later in this document). -->
<settings
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
maxRequests="32"
maxSessions="10"
maxTransactions="5"
useStatementNamespaces="false"
/>
<!-- Type aliases allow you to use a shorter name for long fully qualified class names. -->
<typeAlias alias="order" type="testdomain.Order"/>
<!-- Configure a datasource to use with this SQL Map using SimpleDataSource.
Notice the use of the properties from the above resource -->
<transactionManager type="JDBC" >
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${driver}"/>
<property name="JDBC.ConnectionURL" value="${url}"/>
<property name="JDBC.Username" value="${username}"/>
<property name="JDBC.Password" value="${password}"/>
<property name="JDBC.DefaultAutoCommit" value="true" />
<property name="Pool.MaximumActiveConnections" value="10"/>
<property name="Pool.MaximumIdleConnections" value="5"/>
<property name="Pool.MaximumCheckoutTime" value="120000"/>
<property name="Pool.TimeToWait" value="500"/>
<property name="Pool.PingQuery" value="select 1 from ACCOUNT"/>
<property name="Pool.PingEnabled" value="false"/>
<property name="Pool.PingConnectionsOlderThan" value="1"/>
<property name="Pool.PingConnectionsNotUsedFor" value="1"/>
</dataSource>
</transactionManager>
<!-- Identify all SQL Map XML files to be loaded by this SQL map. Notice the paths
are relative to the classpath. For now, we only have one... -->
<sqlMap resource="examples/sqlmap/maps/Person.xml" />
</sqlMapConfig>
下面詳細討論SQL Map 配置文件的各組成部分。
(一) <properties>元素
SQL Map 配置文件擁有唯一的<properties>元素,用于在配置文件中使用標準的Java屬性文件(name=value)。在屬性文件中定義的屬性可以作為變量在SQL Map 配置文件及其包含的所有SQL Map 映射文件中引用。
例如,如果屬性文件中包含屬性:driver=org.hsqldb.jdbcDriver
SQL Map 配置文件及其每個映射文件都可以使用占位符${driver} 來代表值org.hsqldb.jdbcDriver。
例如:<property name="JDBC.Driver" value="${driver}"/>
這個元素在開發(fā),測試和部署各階段都很有用。它可以使在多個不同的環(huán)境中重新配置應用和使用自動生成工具(如ANT)變得容易。
Java屬性文件可以通過類路徑導入,也可以通過有效的URL導入。
例如:<properties url="file:///c:/config/my.properties" />
(二) <setting>元素
<setting>元素用于配置和優(yōu)化利用XML配置文件創(chuàng)建的SqlMapClient實例。<settings>元素及其所有的屬性都是可選的。下面列出了<setting>元素支持的屬性和功能:
1. maxExecute
同時執(zhí)行一個Sql statement的最大線程數(shù),大于這個值的線程將阻塞直到另一個線程退出。不同的DBMS 有不同的限制值。
例子:maxExecute="256"
缺省值:512
一般情況下,這個值要大于10,而且要同時比maxSessions和maxTransactions參數(shù)設(shè)定的值大。通常情況下,減少最大同時訪問次數(shù)可以提高執(zhí)行的效率。
2. maxSessions
是指在一個給定時間內(nèi)處于活動狀態(tài)的session(或客戶端)的數(shù)量。這個值一般要大于或等于maxTransactions的參數(shù)值,同時要小于maxRequests的參數(shù)值
例子: maxSessions="64"
缺省值:128
3. maxTransaction
同時進入SqlMapClient.startTransaction()的最大線程數(shù)。大于這個值的線程將阻塞直到另一個線程退出。不同的DBMS 有不同的限制值。這個值應該總是小于或等于maxSessions,而且要比maxRequests小的多。通常情況下,減少這個值可以提高執(zhí)行的效率。
例子:maxTransaction="16"
缺省值:32
4. cacheModelsEnabled
啟用或禁用SqlMapClient所有的cache models。調(diào)試程序時有用。
例子:cacheModelsEnabled="true"
缺省值:true
5. lazyLoadingEnabled
啟用或禁用SqlMapClient所有的lazy loading。調(diào)試程序時有用。
例子:lazyLoadingEnabled="true"
缺省值:true
6. enhancementEnabled
This setting enables runtime bytecode enhancement to facilitate optimized JavaBean property access as well as enhanced lazy loading.
例子 enhancementEnabled="true"
缺省值: false (disabled)
7. useStatementNamespaces
這個選項如果啟用,你就必須使用全限定名來引用mapped statements,這個全名是由sqlMap的名字和statement的名字組成的。
例如:queryForObject("sqlMapName.statementName");
例子: useStatementNamespaces="false"
缺省值: false (disabled)
(三) <typeAlias>元素
<typeAlias>允許你指定別名。這樣你就可以通過你指定的短名字來代替冗長的名字了。
例如:<typeAlias alias="shortname" type="com.long.class.path.Class"/>
下面是在SqlMap中預定義的別名:
1. Transaction Manager Aliases
JDBC  com.ibatis.sqlmap.engine.transaction.jdbc.JdbcTransactionConfig
JTA  com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConfig
EXTERNAL com.ibatis.sqlmap.engine.transaction.external.ExternalTransactionConfig
2. Data Source Factory Aliases
SIMPLE  com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory
DBCP  com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory
JNDI  com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory
(四)<transactionManager>元素
注意:在Sql Map 1.0版本中,允許同時配置多個數(shù)據(jù)源,這樣會導致一些問題。所以從2.0的版本開始,只允許配置一個數(shù)據(jù)源,如果你有配置多個數(shù)據(jù)源的需求的話,建議你使用多個不同配置的屬性文件,或者在build Sql Map的時候,作為一個參數(shù)傳進來。
<transactionManager>元素允許你為SQL Map配置事務(wù)管理服務(wù)。type屬性用來指明使用哪種事務(wù)管理,值既可以是一個類名字,也可以是一個別名。
在框架中已經(jīng)包含了三種事務(wù)管理:JDBC, JTA 和 EXTERNAL
 
1. JDBC
允許用JDBC通過Connection 的commit()和rollback()方法來控制事務(wù)。
2. JTA
這種事務(wù)管理使用一個JTA的全局事務(wù)將SQL Map的activities作為一個wider scope事務(wù)的一部分而包含進來,這個事務(wù)可能包含其他的數(shù)據(jù)庫或事務(wù)
源。這個配置需要一個UserTransaction屬性來通過JNDI resource設(shè)置本地的user transaction。
3. EXTERNAL
允許你自己管理事務(wù)。你仍然可以配置一個數(shù)據(jù)源,但是事務(wù)不會在框架生命周期中被提交或回滾。這意味著你必須要用自己的程序來控制事務(wù)。這個設(shè)置對于非事務(wù)型數(shù)據(jù)庫是非常有用的。
(五) <datasource>元素
<datasource>標簽及其屬性是<transactionManager>的配置的一部分,它也是用于配置你的SQL Map所使用的數(shù)據(jù)源的。
目前本框架提供三種數(shù)據(jù)源工廠,但是你也可以自己寫一個。下面是每一種數(shù)據(jù)源工廠的配置舉例:
1. SimpleDataSourceFactory
SimpleDataSourceFactory 為池化的DataSource提供了一個基本的實現(xiàn),適用于在沒有容器提供數(shù)據(jù)源的情況。
<transactionManager type="JDBC">
 <dataSource type="SIMPLE">
  <property name="JDBC.Driver" value="org.postgresql.Driver"/>
  <property name="JDBC.ConnectionURL" value="jdbc:postgresql://server:5432/dbname"/>
  <property name="JDBC.Username" value="user"/>
  <property name="JDBC.Password" value="password"/>
  <!-- OPTIONAL PROPERTIES BELOW -->
  <property name="Pool.MaximumActiveConnections" value="10"/>
  <property name="Pool.MaximumIdleConnections" value="5"/>
  <property name="Pool.MaximumCheckoutTime" value="120000"/>
  <property name="Pool.TimeToWait" value="10000"/>
  <property name="Pool.PingQuery" value="select * from dual"/>
  <property name="Pool.PingEnabled" value="false"/>
  <property name="Pool.PingConnectionsOlderThan" value="0"/>
  <property name="Pool.PingConnectionsNotUsedFor" value="0"/>
 </dataSource>
</transactionManager>
2. DbcpDataSourceFactory
DbcpDataSourceFactory 實現(xiàn)使用Jakarta DBCP(Database Connection Pool)的DataSource
API 提供連接池服務(wù)。適用于Web 容器不提供DataSource 服務(wù)的情況,或執(zhí)行一個單獨的
應用。DbcpDataSourceFactory 中必須要配置的參數(shù)例子如下:
<transactionManager type="JDBC">
 <dataSource type="DBCP">
  <property name="JDBC.Driver" value="${driver}"/>
  <property name="JDBC.ConnectionURL" value="${url}"/>
  <property name="JDBC.Username" value="${username}"/>
  <property name="JDBC.Password" value="${password}"/>
  <!-- OPTIONAL PROPERTIES BELOW -->
  <property name="Pool.MaximumActiveConnections" value="10"/>
  <property name="Pool.MaximumIdleConnections" value="5"/>
  <property name="Pool.MaximumWait" value="60000"/>
  <!-- Use of the validation query can be problematic.
  If you have difficulty, try without it. -->
  <property name="Pool.ValidationQuery" value="select * from ACCOUNT"/>
  <property name="Pool.LogAbandoned" value="false"/>
  <property name="Pool.RemoveAbandoned" value="false"/>
  <property name="Pool.RemoveAbandonedTimeout" value="50000"/>
 </datasource>
</transactionManager>
3. JndiDataSourceFactory
JndiDataSourceFactory 在應用服務(wù)器的容器中從JNDI Context 中查找DataSource 實現(xiàn)。當使用應用
服務(wù)器,并且服務(wù)器提供了容器管理的連接池和相關(guān)的DataSource 實現(xiàn)的情況下,可以使用
JndiDataSourceFactory。使用JDBC DataSource 的標準方法是通過JNDI 來查找。
JndiDataSourceFactory必須要配置的屬性如下:
<transactionManager type="JDBC" >
 <dataSource type="JNDI">
  <property name="DataSource" value="java:comp/env/jdbc/jpetstore"/>
 </dataSource>
</transactionManager>
注意:上面的配置是使用標準的JDBC事務(wù)管理。但是,在一個容器管理的數(shù)據(jù)源中,你也可能想為全局的事務(wù)做如下配置:
<transactionManager type="JTA" >
 <property name="UserTransaction" value="java:/ctx/con/UserTransaction"/>
 <dataSource type="JNDI">
  <property name="DataSource" value="java:comp/env/jdbc/jpetstore"/>
 </dataSource>
</transactionManager>
注意:UserTransaction屬性指向一個JNDI的位置,你可以通過這個JNDI找到一個UserTransaction實例。這個在JTA的事務(wù)管理中是需要的,這樣可以使你的SQL MAP參與到包含有其他數(shù)據(jù)庫和事務(wù)源的事務(wù)中。
(六)<sql-map>元素
sqlMap元素用于包括SQL Map 映射文件和其他的SQL Map 配置文件。每個SqlMapClient
對象使用的SQL Map 映射文件都要在此聲明。映射文件作為stream resource 從類路徑或URL中讀
入。您必須相對于類路徑或URL來指定所有的SQL Map 文件。
下面是幾個例子:
<!-- CLASSPATH RESOURCES -->
<sqlMap resource="com/ibatis/examples/sql/Customer.xml" />
<sqlMap resource="com/ibatis/examples/sql/Account.xml" />
<sqlMap resource="com/ibatis/examples/sql/Product.xml" />
<!-- URL RESOURCES -->
<sqlMap url="file:///c:/config/Customer.xml " />
<sqlMap url="file:///c:/config/Account.xml " />
<sqlMap url="file:///c:/config/Product.xml" />
本篇文章來源于 新技術(shù)天空 原文鏈接:http://www./tech/java/opensource/ibatis/2007-06-29/040bcaface3aa002.html

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多