Sql Map配置文件是iBatis配置的核心,从数据库连接到执行SQL时使用的sqlMap文件都是通过此文件中的配置提供给框架的,它通常命名为sqlMapConfig.xml。
一个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="resource/connection-configs.properties" />
<settings useStatementNamespaces="true"/>
<!-- Configure a built-in transaction manager. If you're using an
app server, you probably want to use its transaction manager
and a managed datasource -->
<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}"/>
</dataSource>
</transactionManager>
<sqlMap resource="resource/sqlMap.xml"/>
</sqlMapConfig>
下面介绍下配置文件中的元素
1.<properties>
它在主配置文件外提供一个键/值对应表,是一个properties文件,它可以让sqlmap配置文件更加灵活。上面例子中的connection-configs.properties文件的内容:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/cyh
username=root
password=root
中间的键值就在运行时替换了了下面的<dataSource>元素下的<property>中${driver}等值。
2.<settings>
全局配置选项,有以下属性:
lazyLoadingEnabled:延迟加载
,true或者false,默认true
cacheModelsEnabled:
高度缓存,将最近使用过的数据存放在内存中
,true或者false
enhancementEnabled:
是否使用cglib中已优化的类来提高延迟加载的性能,true或者false
,默认true
useStatementNamespaces
在使用已映射语句时,是否使用限定名,true或者false
,默认false
假如有个为Acount的SQL映射,包括insert的映射语句。启用useStatementNamespaces时,需要使用Acount.insert来调用这条sql语句。
假如<sqlMapConfig>下有多个<sqlMap resource="resource/sqlMapxxx.xml"/>这样的配置文件,每个文件中的sql元素id都一样,
<sqlMap resource="resource/sqlMap1.xml"/>
<sqlMap resource="resource/sqlMap2.xml"/>
</sqlMapConfig>
sqlMap1.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<select id="find_key" resultClass="hashmap"> ...... </select>
......
sqlMap2.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<select id="find_key" resultClass="hashmap"> ...... </select>
......
为了防止sql语句的id命名冲突,可以设置useStatementNamespaces参数为true,并且为每个sqlmap文件指定不同的命名空间。
sqlMap1.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="com.test.namespace1">
.....
<select id="find_key" resultClass="hashmap">
......
</select>
.....
sqlMap2.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="com.test.namespace2">
.....
<select id="find_key" resultClass="hashmap">
......
</select>
.....
下面3个参数已经废弃,可以不用考虑手动配置:
maxRequests
request:对数据库的一次SQL操作。默认值512
maxSessions:最大会话数
会话是一种线程级机制,用于跟踪一组相关事务和请求的信息,默认值128.
maxTransactions:
最大活动事务数,默认值32
3.<TypeAlias>
用于定义别名,可以通过它用简单的字符替代全限定类名。
iBatis框架为若干类型定义了别名。
一些常用的:
事务管理器:
JDBC替代com.ibatis.sqlmap.engine.transaction.jdbc.JdbcTransactionConfig
JTA,
EXTERNAL和上面类似
数据类型:
string替代java.lang.String
hashmap替代java.util.HashMap
其他类似
数据源工厂类型:
SIMPLE替代com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory
DBCP,
JNDI和上面类似
4.
<transactionManager
>
用于处理事务,type属性用于指定事务管理器。(JDBC,JTA,EXTERNAL)
它的子元素:
<dataSource>:
指定DataSourceFactory实现类,iBatis用这个实现类来创建实际的DataSource,它有3个可选的属性:SIMPLE,DBCP,JNDI
SIMPLE:简单数据源工厂,用于配置内置有简单连接池的数据源,除了实际的jdbc驱动程序外,该数据源工厂需要的其他东西都包含在iBatis框架中。
DBCP:用于使用Jakarta Commons数据库连接池实现。
JNDI:用于允许iBatis共享通过JNDI定位的基于容器的数据源。
<dataSource>的子元素:<property>,它定义了数据库连接的配置
5.
<typeHandler>
类型处理器,将数据从数据库的类型转换为应用程序中的数据类型。
6.<sqlMap>
指定SQL映射文件的位置
元素有2个属性,resource和url
resource相对于类路径根目录的路径。