一、 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./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://www./tech/java/opensource/ibatis/2007-06-29/040bcaface3aa002.html
|
|