配置文件的名称并不重要,可以由程序员来指定,这里假设该配置文件名为sql_map_config.xml。在配置文件中通常会配置如下这些持久层框架信息:
q 数据库连接JDBC。
q SQL Map映射文件的加载。
q SQL Map的配置和优化设定。
下面看一个sql_map_config.xml示例12.1:
例12.1:sql_map_config.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">
<sqlMapConfig>
<!-- 配置和优化SQL Map解析实例的设定 -->
<settings cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
maxRequests="32"
maxSessions="10"
maxTransactions="5"
useStatementNamespaces="true" />
<!-- 配置连接 -->
<transactionManager type="JDBC" >
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="org.postgresql.Driver"/>
<property name="JDBC.ConnectionURL"
value="jdbc:postgresql://192.168.3.53:5432/nrsattacksolution"/>
<property name="JDBC.Username" value="sa"/>
<property name="JDBC.Password" value="1111"/>
<!-- 最大连接数 -->
<property name="Pool.MaximumActiveConnections" value="10"/>
</dataSource>
</transactionManager>
<!-- SQL Map映射文件的取得… -->
<sqlMap resource="fw_attacksolution_SqlMap.xml" />
</sqlMapConfig>
在这个配置文件中,明确表示了SQL Map框架的配置参数,以<sqlMapConfig>作为根结点是必不可少的。随后使用了<settings>元素、<transactionManager>元素和<sqlMap>元素。
在<settings>元素中提供了多个属性来配置和优化SQL Map运行时的实例:
q maxRequests属性指定了同时执行SQL语句最大运行数。
q maxSessions属性指定了同一时间内活动的最大Session数。所谓Session就是一个请求或一个SQL Map运行时实例自动获得的会话。
q maxTransactions属性指定了最大事务处理的线程数。
q cacheModelsEnabled属性指定了SQL Map运行时实例的缓存Model是否开启。
q lazyLoadingEnabled属性指定了持久化数据是否延迟加载。
q enhancementEnabled属性指定了全局性的启用或禁用字节码增强,以优化访问POJO变量属性的功能。
q useStatementNamespaces属性指定了在SQL Map映射文件中是否用全限定名来引用映射声明。
<transactionManager>元素用来配置事务管理。<transactionManager>元素的属性type指定了所使用的事务管理器的类型。该属性值可以是一个别名,也可以是一个类名,本例中所使用的JDBC就是一个别名,它是由IBatis框架所提供。包含在IBatis框架中的事务管理器有三个:除了本例所使用的JDBC(用来管理事务)外,还提供了JTA和EXTERNAL两个事务管理器。其中JTA将提供全局的事务管理,EXTERNAL则可以让程序员自行管理事务。
<transactionManager>元素的子元素<dataSource>为JDBC数据源设置了一系列参数,这些参数将被用于连接数据库。在SQL Map架构中提供了三种JDBC连接的方式,可以利用type属性来设置这三种方式:
q SimpleDataSourceFactory是IBatis框架提供的基本连接池的实现,当容器没有提供数据源时可以选择它。SimpleDataSourceFactory的别名已经由IBatis框架所定义,名为“SIMPLE”。本例就是使用SimpleDataSourceFactory作为连接池。
q DbcpDataSourceFactory是IBatis框架使用DBCP连接池所提供的服务。在Web容器中经常会使用它,在第三章的完整示例中曾经使用它来配置Struts框架部分DAO的JDBC连接池。DbcpDataSourceFactory的别名已经由IBatis框架所定义,名为“DBCP”。
q JndiDataSourceFactory是IBatis框架提供的对JNDI命名服务的支持,它可以在容器中利用JNDI从上下文中找到连接池的实现。在介绍EJB的配置以及Hibernate框架时,曾经将它作为在JBoss服务器中取得连接池的实现,在IBatis框架中是一样的道理。JndiDataSourceFactory的别名已经由IBatis框架所定义,名为“JNDI”。
本例中最后一个元素是<sqlMap>元素,利用属性resource来指定SQL Map映射文件的路径定义。SQL Map映射文件可以从classpath中得到,所以这个路径的定义是以classpath为根目录开始的。本例中没有定义其他路径,说明SQL Map映射文件将被直接放置在classpath路径下。SQL Map映射文件可以有多个。