Ibatis学习总结2--SQL Map XML 配置文件
SQL Map 使用 XML 配置文件统一配置不同的属性,包括 DataSource 的详细配置信息, SQL Map 和其他可选属性,如线程管理等。以下是 SQL Map 配置文件的一个例子: SqlMapConfig.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">
<!-- Always ensure to use the correct XML header 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 aliases 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.MaximumIdleConnections" 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=“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 |
如果启用本属性,必须使用全限定名来引用 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 JTA
EXTERNAL
com.ibatis.sqlmap.engine.transaction.jdbc.JdbcTransactionConfig com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConfig
com.ibatis.sqlmap.engine.transaction.external.ExternalTransactionConfig
Data Source Factory 别名
SIMPLE DBCP
JNDI
com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory
com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory
- <transactionManager>元素
1.0 转换注意事项:SQL Map 1.0 允许配置多个数据源。这引起了一些不好的实践。因此,
2.0 版本只允许一个数据源。要使用多个部署/配置参数,您最好使用多个属性文件,不同的 系统使用不同的属性文件,或在创建 SQL Map 时传入不同的属性文件。
<transationManager>元素让您为 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.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 服务的情况,或执行一个单 独的应用。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.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 来查找。 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 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 -->
<sqlMap url="file:///c:/config/Customer.xml " />
<sqlMap url="file:///c:/config/Account.xml " />
<sqlMap url="file:///c:/config/Product.xml" />后面将总结SQL Map XML 映射文件的结构。
Ibatis学习总结2--SQL Map XML 配置文件的更多相关文章
- 命令行方式使用abator.jar生成ibatis相关代码和sql语句xml文件
最近接手一个老项目,使用的是数据库是sql server 2008,框架是springmvc + spring + ibatis,老项目是使用abator插件生成的相关代码,现在需要增加新功能,要添加 ...
- maven学习(一)setting.xml配置文件详解
maven环境搭建: 1.官网下载zip包,解压至任意目录(如:E:\wly\apache-maven-3.2.5) 2.环境变量MAVEN_HOME(E:\wly\apache-maven-3.2. ...
- 学习日记_SSH框架web.xml配置文件篇
1.参考一:http://www.blogjava.net/yxhxj2006/archive/2012/07/09/382632.html 2.参考二: <!-- web 容器启动spring ...
- Ibatis学习总结6--使用 SQL Map API 编程
SQL Map API 力求简洁.它为程序员提供 4 种功能:配置一个 SQL Map,执行 SQL update操作,执行查询语句以取得一个对象,以及执行查询语句以取得一个对象的 List. 配置 ...
- Ibatis学习总结4--SQL Map XML 映射文件扩展
SQL Map XML 映射文件除了上文提到的属性还有一些其他重要的属性,下文将详细介绍这些属性. 缓存 Mapped Statement 结果集 通过在查询 statement 中指定 cacheM ...
- Ibatis学习总结3--SQL Map XML 映射文件
在前面的例子中,只使用了 SQL Map 最简单的形式.SQL Map 的结构中还有其他更多 的选项.这里是一个 mapped statement 较复杂的例子,使用了更多的特性. <sqlMa ...
- ibatis中的xml配置文件
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE sqlMap PUBLIC "-/ ...
- 【web开发学习笔记】ibatis学习总结
ibatis学习总结 ibatis数据库配置文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCT ...
- ibatis学习笔记(完整)
1. Ibatis是开源软件组织Apache推出的一种轻量级的对象关系映射(ORM)框架,和Hibernate.Toplink等在java编程的对象持久化方面深受开发人员欢迎. 对象关系映 ...
随机推荐
- shell exit 0 exit 1
其实都一样,都是退出,只不过返回这个0和1是返回给操作系统的错误或者正确代码. exit 1 指的是脚本运行的返回值,用来指示成功或失败,以及失败的原因. exit 0 表示成功,exit 1表示失败 ...
- Linux shell basic2 cat find tr
Cat stands for concatenate. Case 1. When the text files have more blank lines, we want to remove the ...
- [转] KVM Internals, code and more
KVM Kernel-based Virtual Machine Internals, code and more http://slides.com/braoru/kvm#/ What behind ...
- javascript单元测试工具
单元测试关注的是验证一个模块或一段代码的执行效果是否和设计或预期一样.有些开发人员认为,编写测试用例浪费时间而宁愿去编写新的模块.然而,在处理大型应用程序时,单元测试实际上会节省时间:它能帮助您跟踪问 ...
- js fs read json 文件json字符串无法解析
读取 xxx.txt(里面就是一段 json)-> JSON.parse( fs.readFileSync( xxx.txt ) ) -> 报 SyntaxError: unexpecte ...
- [原创]CI持续集成系统环境---部署Gitlab环境完整记录
Gitlab是一个代码托管平台,在实际工作中,对代码管理十分有用. 废话不多说,下面是对我自己搭建的Gitlab环境做一记录: (1)安装 ------------------------------ ...
- sqlserver字段类型详解(转)
bit 整型 bit数据类型是整型,其值只能是0.1或空值.这种数据类型用于存储只有两种可能值的数据,如Yes 或No.True 或False .On 或Off. 注意:很省空间的一种数据类型, ...
- [服务]ftp主动模式和被动模式
经常忘记这个东西.于是总结下这东西感受下这个协议. FTP连接方式 控制连接:标准端口为21,用于发送FTP命令信息 数据连接:标准端口为20,用于上传.下载数据 数据连接的建立类型: 主动模式:服务 ...
- PHP基础13:数组排序
<?php //1.对数组进行升序排序 - sort() $cars=array("VOLVO","BMW","BYD"); $fri ...
- ASP.NET Web API路由规则(二)
默认的规则 在ASP.NET MVC4中 global.asax.cs代码中并无注册默认路由规则的代码 代码如下: public class WebApiApplication : System.We ...