|
一、 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
|
|
|