SQL Map XML配置文件。

SQL Map使用XML配置文件统一配置不同的属性,包括DataSource的详细配置信息,SQL Map和其他可选属性,如线程管理等。以下是SQL Map配置文件的一个例子:

SqlMapConfig.xml


<?xml version ="1.0" encoding="UTF-8" ?>

<!DOCTYPE sqlMap Config 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 headers 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 alias 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.MaximumldleConnections" 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)变得容易。属性文件可以从类路径中加载(使用resource属性),也可以从合法的URL中加载(使用url属性)。例如,要加载固定路径的属性文件,使用:

<properties url = "file:///c:/config/my.properties" />


<setting>元素

<setting>元素用于配置和优化SqlMapClient实例的各选项。<setting>元素本身及其所有的属性都是可选的。以下列出了<setting>元素支持的属性及其功能:

  • maxRequests
同时执行SQL语句的最大线程数。大于这个值的线程将阻塞直到另一个线程执行完成。不同的DBMS有不同的限制值,但任何数据库都有这些限制。通常这个值应该至少是 maxTransactions(参加以下)的10倍,并且总是大于maxSessions和maxTranactions。减少这个参数值通常能提高性能。例如:maxRequests = "250"。
缺省值:512.

  • maxSessions
同一时间内活动的最大session数。一个session可以是代码请求的显式session,也可以是当线程使用SqlMapClient实例(即执行一条语句)自动获得的session。它应该 总是大于或等于maxTransactions并小于maxRequests。减少这个参数值通常能减少内存使用。例如:maxSessions = "64"。
缺省值:128

  • maxTransactions
同时进入SqlMapClient.startTransaction()的最大线程数。大于这个值得线程将阻塞直到另一个线程退出。不同的DBMS有不同的限制值,但任何数据库都有这些限制。这 个参数值应该总是小于或等于maxSessions并总是远远小于maxRequests。减小这个参数值通常能提高性能。例如:maxTransactions = "16"。
缺省值:32

  • cacheModelsEnabled
全局性地启用或禁用SqlMapClient的所有缓存model。调试程序时使用。例如:cacheModelsEnabled = "true"
缺省值:true(启用)

  • lazyLoadingEnabled
全局性地启用或禁用SqlMapClient的所有延迟加载。调试程序时使用。例子:lazyLoadingEnabled = "true"
缺省值:true(启用)

  • enhancementEnabled
全局性地启用或禁用运行时字节码增强,以优化访问JavaBean属性的性能,同时优化延迟加载的性能。例子:enhancementEnabled = "true"
缺省值:false(禁用)

  • useStatementNamespaces
如果启用本属性,必须使用全限定名来引用mapped statement。Mapped statement的全限定名由sql-map的名称和mapped-statement的名称合成。例如: queryForObject("sqlMapName.statementName");例如:useStatementNamespaces = "false"。
缺省值:false(禁用)


<typeAlias>元素
<typeAlias>元素让您为一个通常较长的、全限定类名指定一个较短的别名。例如:
<typeAlias alias = "shortname" type = "com.long.class.path.Class" />
在SQL Map配置文件预定义了几个别名,他们是:
  • 事务管理器别名:
JDBC com.ibatis.sqlmap.engine.trnasaction.jdbc.JdbcTransactionConfig
JTA com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConfig
EXTERNAL com.ibatis.sqlmap.engine.transaction.external.ExternalTransactionConfig

  • Data Source Factory别名
SIMPLE com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory
DBCP com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory
JNDI com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory

<transactionManager>元素
1.0转换注意事项:SQL Map1.0允许配置多个数据源。这引起了不好的实践。因此,2.0版本只允许一个数据源。要使用多个部署/配置参数,您最好使用多个属性文件,不同的系统使用不同的属性文件,或在创建SQL Map时传入不同的属性文件。

<transactionManager>元素让您为SQL Map配置事务管理服务。属性type指定所使用的事务管理器类型。这个属性值可以是一个类名,也可以是一个别名。包含在框架的三个事务管理器分别是:JDBC、JTA和EXTERNAL。
  • JDBC:
通过常用的Connection commit()和rollback()方法,让JDBC管理事务。
  • JTA:
本事务管理器使用JTA全局事务,使SQL Map的事务包括在更大的事务范围内,这个更大的事务范围可能包括了其他的数据库和事务资源。这个配置需要一个 UserTransaction属性,以便从JNDI获得一个UserTransaction。
  • EXTERNAL:
这个配置可以让您自己管理事务。您仍然可以配置一个数据源,但事务不再作为框架生命周期的一部分被提交或回退。这意味着SQL Map外部应用的一部分必须自己管理 事务。这个配置也可以用于没有事务管理的数据库(例如只读数据库)。

<datasource>元素
<datasource>是<transactionManager>的一部分,为SQL Map数据源设置了一系列参数。目前SQL Map架构只提供三个DataSource Factory,但您也可以添加自己的实现。下面详细地讨论DataSourceFactory的三个实现及其例子。
  • SimpleDataSourceFactory
SimpleDataSourceFactory为DataSource提供了一个基本的实现,适用于在没有J2EE容器提供DataSource的情况。它基于iBatis的SimpleDataSource连接池实现。

<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.MaximumldleConnections" 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>

  • 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.MaximumldleConnections" 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>

  • 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属性指向UserTransaction实例所在的JNDI位置。JTA事务管理需要它,以使SQL Map能够参与涉及其他数据库和事务资源的范围更大的事务。

<sqlMap>元素
<sqlMap>元素用于包括SQL Map映射文件和其他的SQL Map配置文件。每个SQLMapClient对象使用的所有SQL Map映射文件都要在此声明。映射文件作为stream resource从类路径或URL读入。您必须在这里指定所有的SQL Map文件。例子如下:
<! -- CLASSPATH SOURCES -->
< 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 resource = "file:///c:/config/ Customer.xml" />
< sqlMap resource = "file:///c:/config/Customer.xml" />
< sqlMap resource = "file:///c:/config/Customer.xml" />
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值