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
- maxSessions
- maxTransactions
- cacheModelsEnabled
- lazyLoadingEnabled
- enhancementEnabled
- useStatementNamespaces
- 事务管理器别名:
- Data Source Factory别名
- JDBC:
- JTA:
- EXTERNAL:
- SimpleDataSourceFactory
<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
<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