以下是SqlMapConfig.xml配置文件的一个例子:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE sqlMapConfig
    PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" 
	"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
           <properties resource="SqlMapConfig.properties" /> 
           <settings 
                enhancementEnabled="true"  
		azyLoadingEnabled="true" 	
		cacheModelsEnabled="true"
		errorTracingEnabled="true"
                maxRequests="32" 
		maxSessions="10"
		maxTransactions="5"     
                useStatementNamespaces="true"  
            />

            <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 users" />
                          <property name="Pool.PingEnabled" value="false" /> 
                          <property name="Pool.PingConnectionsOlderThan" value="1" />
                          <property name="Pool.PingConnectionsNotUsedFor" value="1" />
                   </dataSource>
            </transactionManager>
			
            <sqlMap resource="com/demo/ibatis/beans/users_SqlMap.xml" />
</sqlMapConfig>

iBatis使用 XML 配置文件统一配置不同的属性,包括 DataSource 的详细配置信息,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}"/>
属性文件可以从类路径中加载(使用resource属性),也可以从合法的 URL 中加载(使用url 属性)。

例如,要加载固定路径的属性文件,使用:<properties url=”file:///c:/config/my.properties” />

<setting>元素

<setting>元素用于配置和优化 SqlMapClient实例的各选项。<setting>元素本身及其所有的属性都是可选的。具体请看下表:



     maxRequests   

同时执行 SQL 语句的最大线程数。大于这个值的线程将阻塞直到另一个线程执行完成。不同的 DBMS有不同的限制值,但任何数据库都有这些限制。通常这个值应该至少是 maxTransactions(参见以下)的 10 倍 , 并 且 总 是 大 于 maxSessions 和maxTranactions。减小这个参数值通常能提高性能。
例如:maxRequests=“256”
缺省值: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

全局性地启用或禁用运行时字节码增强,以优化访问 Java Bean 属性的性能,同时优化延迟加载的性能。

例子:enhancementEnabled=“true”

缺省值:false(禁用)

 useStatementNamespaces   

如果启用本属性,必须使用全限定名来引用 mappedstatement。Mapped statement 的全限定名由 sql-map的名称和 mapped-statement 的名称合成。例如:

queryForObject(“sqlMapName.statementName”);

例子:useStatementNamespaces=“false”

缺省值:false(禁用)

    errorTracingEnabled

是否启用错误日志,在开发期间建议设为"true" 以方便调试

例子:errorTracingEnabled=“true”

缺省值:false(禁用)

<transactionManager>元素

<transationManager>元素为 SQL Map 配置事务管理服务。属性 type 指定所使用的事务管理器类型。这个属性值可以是一个类名,也可以是一个别名。

包含在框架的三个事务管理器分别是:JDBC,JTA 和 EXTERNAL。
1. JDBC:通过常用的 Connection commit()和 rollback()方法,让 JDBC 管理事务。
2. JTA:本事务管理器使用一个 JTA 全局事务,使 SQL Map 的事务包括在更大的事务范围内,这个更大的事务范围可能包括了其他的数据库和事务资源。

这个配置需要一个UserTransaction属性,以便从JNDI获得一个UserTransaction。参见以下JNDI数据源的例子。
3. EXTERNAL:这个配置可以我们自己管理事务。我们仍然可以配置一个数据源,但事务不再作为框架生命周期的一部分被提交或回退。

这意味着 SQL Map 外部应用的一部分必须自己管理事务。这个配置也可以用于没有事务管理的数据库(例如只读数据库)。

<datasource>元素

<datasource>是<transactionManager>的一部分,为 SQL Map 数据源设置了一系列参数。目前 SQL Map 架构只提供三个 DataSource Factory,分别为:

SimpleDataSourceFactory(别称为SIMPLE)、DbcpDataSourceFactory(别称为DBCP)、JndiDataSourceFactory(别称为JNDI)

但我们也可以添加自己的实现。下面简单地说明一下 三个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.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>DbcpDataSourceFactory:
        DbcpDataSourceFactory 实现使用 Jakarta DBCP(Database Connection Pool)的 DataSource API 提供连接池服务。适用于应用/Web 容器不提供 DataSource 服务的情况,或执行一个单独的应用。配置例子:
<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>JndiDataSourceFactory:
        JndiDataSourceFactory 在应用容器内部从 JNDI Context 中查找 DataSource 实现。当使用应用服务器,并且服务器提供了容器管理的连接池和相关 DataSource 实现的情况下,可以使用 JndiDataSourceFactory。使用 JDBC DataSource 的标准方法是通过 JNDI 来查找。配置例子:
<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 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 -->以下是url读入
 <sqlMap url="file:///c:/config/Customer.xml " />
 <sqlMap url="file:///c:/config/Account.xml " />
 <sqlMap url="file:///c:/config/Product.xml" />