一、 SQL Map XML 配置文件
SQL Map 使用XML 配置文件集中的配置不同的设置属性,包括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.ibatis.com/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}"/>
这个元素在开发,测试和部署各阶段都很有用。它可以使在多个不同的环境中重新配置应用和使用自动生成工具(如ANT)变得容易。
Java属性文件可以通过类路径导入,也可以通过有效的URL导入。
例如:<properties url="file:///c:/config/my.properties" />
(二)
<setting>元素
<setting>元素用于配置和优化利用XML配置文件创建的SqlMapClient实例。<settings>元素及其所有的属性都是可选的。下面列出了<setting>元素支持的属性和功能:
1. maxExecute
同时执行一个Sql statement的最大线程数,大于这个值的线程将阻塞直到另一个线程退出。不同的DBMS
有不同的限制值。
例子:maxExecute="256"
缺省值:512
一般情况下,这个值要大于10,而且要同时比maxSessions和maxTransactions参数设定的值大。通常情况下,减少最大同时访问次数可以提高执行的效率。
2.
maxSessions
是指在一个给定时间内处于活动状态的session(或客户端)的数量。这个值一般要大于或等于maxTransactions的参数值,同时要小于maxRequests的参数值
例子:
maxSessions="64"
缺省值:128
3. maxTransaction
同时进入SqlMapClient.startTransaction()的最大线程数。大于这个值的线程将阻塞直到另一个线程退出。不同的DBMS
有不同的限制值。这个值应该总是小于或等于maxSessions,而且要比maxRequests小的多。通常情况下,减少这个值可以提高执行的效率。
例子:maxTransaction="16"
缺省值:32
4. cacheModelsEnabled
启用或禁用SqlMapClient所有的cache
models。调试程序时有用。
例子:cacheModelsEnabled="true"
缺省值:true
5. lazyLoadingEnabled
启用或禁用SqlMapClient所有的lazy
loading。调试程序时有用。
例子: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版本中,允许同时配置多个数据源,这样会导致一些问题。所以从2.0的版本开始,只允许配置一个数据源,如果你有配置多个数据源的需求的话,建议你使用多个不同配置的属性文件,或者在build
Sql Map的时候,作为一个参数传进来。
<transactionManager>元素允许你为SQL
Map配置事务管理服务。type属性用来指明使用哪种事务管理,值既可以是一个类名字,也可以是一个别名。
在框架中已经包含了三种事务管理:JDBC, JTA 和 EXTERNAL
1. JDBC
允许用JDBC通过Connection
的commit()和rollback()方法来控制事务。
2. JTA
这种事务管理使用一个JTA的全局事务将SQL Map的activities作为一个wider
scope事务的一部分而包含进来,这个事务可能包含其他的数据库或事务
源。这个配置需要一个UserTransaction属性来通过JNDI
resource设置本地的user transaction。
3.
EXTERNAL
允许你自己管理事务。你仍然可以配置一个数据源,但是事务不会在框架生命周期中被提交或回滚。这意味着你必须要用自己的程序来控制事务。这个设置对于非事务型数据库是非常有用的。
(五)
<datasource>元素
<datasource>标签及其属性是<transactionManager>的配置的一部分,它也是用于配置你的SQL
Map所使用的数据源的。
目前本框架提供三种数据源工厂,但是你也可以自己写一个。下面是每一种数据源工厂的配置举例:
1. SimpleDataSourceFactory
SimpleDataSourceFactory
为池化的DataSource提供了一个基本的实现,适用于在没有容器提供数据源的情况。
<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 实现使用Jakarta DBCP(Database
Connection Pool)的DataSource
API 提供连接池服务。适用于Web 容器不提供DataSource
服务的情况,或执行一个单独的
应用。DbcpDataSourceFactory 中必须要配置的参数例子如下:
<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 在应用服务器的容器中从JNDI Context
中查找DataSource 实现。当使用应用
服务器,并且服务器提供了容器管理的连接池和相关的DataSource
实现的情况下,可以使用
JndiDataSourceFactory。使用JDBC DataSource 的标准方法是通过JNDI 来查找。
JndiDataSourceFactory必须要配置的属性如下:
<transactionManager type="JDBC"
>
<dataSource type="JNDI">
<property name="DataSource"
value="java:comp/env/jdbc/jpetstore"/>
</dataSource>
</transactionManager>
注意:上面的配置是使用标准的JDBC事务管理。但是,在一个容器管理的数据源中,你也可能想为全局的事务做如下配置:
<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的事务管理中是需要的,这样可以使你的SQL
MAP参与到包含有其他数据库和事务源的事务中。
(六)<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"
/>
本文引用通告地址:
http://blog.csdn.net/sunsnow8/services/trackbacks/246576.aspx