admin管理员组文章数量:1534216
2024年7月16日发(作者:)
开发指南 iBATIS SQL Maps Page 1 of 62
iBATIS SQL Maps
开发指南
Version 2.0
2004年6月17日
Clinton Begin 著
刘 涛 译
Clinton Begin 著 刘涛(toleu@) 译
开发指南 iBATIS SQL Maps Page 2 of 62
目 录
简介..................................................................................................................................................4
关于本文...................................................................................................................................4
SQL Maps (.*)......................................................................................................5
SQL Map的概念......................................................................................................................5
SQL Map如何工作?..............................................................................................................5
安装6
JAR文件和依赖性...................................................................................................................6
从1.x版本升级........................................................................................................................7
是否应该升级...................................................................................................................7
转换XML配置文件(从1.x到2.0)...........................................................................7
使用新的JAR文件..........................................................................................................8
SQL Map XML配置文件..............................................................................................................10
SQL Map XML映射文件..............................................................................................................17
18
Statement的类型............................................................................................................18
SQL 语句.......................................................................................................................19
自动生成的主键.............................................................................................................20
存储过程.........................................................................................................................20
21
21
Inline Parameter简介.....................................................................................................22
22
23
23
24
Parameter Map 和 .24
Inline 26
基本类型输入参数.........................................................................................................27
Map类型输入参数........................................................................................................28
28
隐式的30
基本类型的Result(即String,Integer,Boolean)..................................................31
Clinton Begin 著 刘涛(toleu@) 译
开发指南 iBATIS SQL Maps Page 3 of 62
Map类型的31
复杂类型属性(即自定义类型的属性).............................................................................32
避免N+1 Select(1:1).......................................................................................................33
延迟加载 VS 联合查询(1:1)...................................................................................33
复杂类型集合的属性.............................................................................................................34
避免N+1 Select(1:M和M:N)........................................................................................34
组合键值或多个复杂参数属性.............................................................................................35
支持Parameter Map和Result Map的数据类型..................................................................36
缓存Mapped Statement结果集.............................................................................................36
只读 VS 可读写............................................................................................................37
Serializable可读写缓存.................................................................................................37
缓存类型.........................................................................................................................38
动态41
二元条件元素.................................................................................................................42
一元条件元素.................................................................................................................43
其他元素.........................................................................................................................43
简单的动态SQL元素...................................................................................................44
使用SQL Map API编程................................................................................................................46
配置46
事务处理.................................................................................................................................46
自动的事务处理.............................................................................................................47
全局(分布式)事务.....................................................................................................48
批处理.....................................................................................................................................49
用SqlMapClient执行SQL语句...........................................................................................49
代码例子.................................................................................................................................52
例子1:执行update(insert,update,delete).........................................................52
例子2:查询成对象(select).....................................................................................52
例子3:用预赋值的结果对象查询成对象(select).................................................52
例子4:查询成对象List(select)..............................................................................52
例子5:自动提交..........................................................................................................53
例子6:用结果集边界查询成对象List(select)......................................................53
例子7:用RowHandler执行查询(select)..............................................................53
例子8:查询成Paginated List(select).....................................................................53
例子9:查询成Map(select)....................................................................................53
用Jakarta Commons Logging记录SQL Map日志......................................................................54
配置日志服务.........................................................................................................................54
Java Bean简易教程.......................................................................................................................56
Resources(ce.*)...............................................................................58
SimpleDataSource(.*)........................................................................60
ScriptRunner (.*).....................................................................................62
Clinton Begin 著 刘涛(toleu@) 译
开发指南 iBATIS SQL Maps Page 4 of 62
简介
使用SQL Map,能够大大减少访问关系数据库的代码。SQL Map使用简单的XML配
置文件将Java Bean映射成SQL语句,对比其他的数据库持续层和ORM框架(如JDO的
实现,Hibernate等),SQL Map最大的优点在于它简单易学。要使用SQL Map,只要熟悉
Java Bean,XML和SQL,就能使您充分发挥SQL语句的能力。
关于本文
本文讨论了iBATIS SQL Map最重要的特性。本文中没有提及的其他特性,可能以后
不再支持或不久将会修改,并且修改时不作通告,因此最好不要使用它们。本文将随着iBatis
SQL Map的修改而变更。如果您发现其中的错误,或是觉得某些地方难以理解,请发email
至@
。
本文是《iBatis SQL Maps Developer Guide》的中文版,仅供读者参考,最权威的应以
Clinton Begin的官方文档为准。如果中文翻译有错误,请通知译者(email:toleu@
,
。 Blog:/)
Clinton Begin 著 刘涛(toleu@) 译
开发指南 iBATIS SQL Maps Page 5 of 62
SQL Maps (.*)
SQL Map的概念
SQL Map API让开发人员可以轻易地将Java Bean映射成PreparedStatement的输入参数
和ResultSet结果集。开发SQL Map的想法很简单:提供一个简洁的架构,能够用20%的代
码实现80%JDBC的功能。
SQL Map如何工作?
SQL Map提供了一个简洁的框架,使用简单的XML描述文件将Java Bean,Map实现
和基本数据类型的包装类(String,Integer等)映射成JDBC的PreparedStatement。以下流
程描述了SQL Maps的高层生命周期:
将一个对象作为参数(对象可以是Java Bean,Map实现和基本类型的包装类),参数对
象将为SQL修改语句和查询语句设定参数值。
1) 执行mapped statement。这是SQL Maps最重要的步骤。SQL Map框架将创建一个
PreparedStatement实例,用参数对象为PreparedStatement实例设定参数,执行
PreparedStatement并从ResultSet中创建结果对象。
2) 执行SQL的更新数据语句时,返回受影响的数据行数。执行查询语句时,将返回
一个结果对象或对象的集合。和参数对象一样,结果对象可以是Java Bean,Map
实现和基本数据类型的包装类。
下图描述了以上的执行流程。
Clinton Begin 著 刘涛(toleu@) 译
开发指南 iBATIS SQL Maps Page 6 of 62
安装SQL Maps
安装SQL Maps很简单,只要把相关的JAR文件复制到类路径下即可。类路径或者是
JVM启动是指定的类路径(java命令参数),或者是Web应用中的/WEB-INF/lib目录。Java
类路径的详尽讨论超出了本文的范围,如果您是Java的初学者,请参考以下的资源:
/j2se/1.4/docs/tooldocs/win32/
/j2se/1.4.2/docs/api/java/lang/
/j2se/1.4.2/docs/
安装iBatis需要在类路径下放置以下JAR文件:
文件名 描述 是否必需
是
是
否
IBATIS公用的工具类
IBATIS SQL Maps框架
IBATIS DAO 框架
JAR文件和依赖性
如果一个框架依赖于太多的JAR文件,就很难与其他的应用和框架集成。IBATIS 2.0
的一个主要的关注点是管理并降低JAR文件的依赖性。因此,如果您用的是JDK1.4,IBATIS
Clinton Begin 著 刘涛(toleu@) 译
开发指南 iBATIS SQL Maps Page 7 of 62
仅仅依赖于Jakarta Commons Logging框架。可选的JAR文件放在发布版的/lib/optional目录
下。它们根据功能来分类。下面列表总结了何时需要使用可选JAR类库。
描述
1.4以前JDK版本支持
何时使用
如果您使用的JDK版本低于
1.4,并且您的应用服务器不
提供这些JAR文件,您将需
要这些可选的JAR文件
目录
/lib/optional/jdbc
/lib/optional/jta
/lib/optional/xml
IBATIS的向后兼容 如果您使用旧的IBATIS(1.x)
/lib/optional/compatibility
DAO框架,或旧的SQL Maps
(1.x)
如果您需要使用CGLIB2.0字
节码增强来提高lazy loading
和reflection的性能
如果您使用Jakarta DBCP连
接池
如果您使用OSCache来支持
集中或分布式缓存
如果您需要使用Log4J
/lib/optional/enhancement
运行时字节码增强
DataSource实现
分布式缓存
Log4J日志
/lib/optional/dbcp
/lib/optional/caching
/lib/optional/logging
从1.x版本升级
是否应该升级
判断您是否需要升级的最好办法是尝试它。下面是几种升级的方法。
1. 版本2.0几乎完全保持和1.x版本的向后兼容,因此某些情况下只需用新的JAR文
件替代旧的即可。这个升级方法带来的好处最少,但最简单。您无需修改XML文
件或Java代码,但会存在某些不兼容的问题。
2. 第二种方法是把1.x的XML文件转换成2.0规范,但仍使用1.x的Java API。除了
XML映射文件存在着细微的不兼容之处外,这是个安全的方法。SQL Map框架包
括了用来转换XML映射文件的ANT Task(参见下节)。
3. 第三种方法是转换XML文件(和第二种方法相同)和Java代码。因为没有转换
Java代码的工具,必须手工进行。
4. 第四种方法是不必升级。如果您升级有困难,可以让应用继续使用1.x版本。让旧
应用继续使用1.x版,在新应用中使用2.0版是个不错的主意。
转换XML配置文件(从1.x到2.0)
框架的2.0版本包含了一个可以在ANT构建环境中使用的XML文件转换器。虽然转换
Clinton Begin 著 刘涛(toleu@) 译
开发指南 iBATIS SQL Maps Page 8 of 62
XML配置文件是可选的,但将1.x的配置文件转换成2.0仍然是个好主意。你几乎不会遇到
不兼容的文件,并且还可以使用2.0版本新的特性(即使您继续使用1.x的Java API)。
XML配置文件转换器在文件中的例子如下:
classname="tTask" classpathref="classpath"/> 就像您看到的一样,它和Ant的copy task很相似。事实上它就是Ant的copy task类的 子类,因此您可以用这个task完成任何copy task的功能(详细信息请参考Ant的Copy task 文档) 使用新的JAR文件 要升级到2.0,最好删除iBatis原有旧的JAR文件及其依赖JAR类库,并用新的JAR 文件替代。但要主要不要删除其他组件或框架还需要的文件。请参考上节关于JAR类库及 其依赖性的讨论。 下表总结了旧文件及其相应的新文件。 旧文件 1.2.9b以后的版本,这个文件被分拆成一下3 个文件 jdbc2_ 新文件 (必需) (必需) (可选) (必需) (可选) (可选) (可选) (可选) (可选) jdbc2_(可选) (可选) (可选) (可选) Clinton Begin 著 刘涛(toleu@) 译 开发指南 iBATIS SQL Maps Page 9 of 62 (可选) (可选) 本文余下部分将介绍如何使用 SQL Maps 框架。 Clinton Begin 著 刘涛(toleu@) 译 开发指南 iBATIS SQL Maps Page 10 of 62 SQL Map XML配置文件 SQL Map使用XML配置文件统一配置不同的属性,包括DataSource的详细配置信息, SQL Map和其他可选属性,如线程管理等。以下是SQL Map配置文件的一个例子: PUBLIC "-////DTD SQL Map Config 2.0//EN" "/dtd/"> cacheModelsEnabled="true" enhancementEnabled="true" lazyLoadingEnabled="true" maxRequests="32" maxSessions="10" maxTransactions="5" useStatementNamespaces="false" /> Clinton Begin 著 刘涛(toleu@) 译 开发指南 iBATIS SQL Maps Page 11 of 62 以下详细讨论 SQL Map 配置文件的各组成部分。 SQL Map配置文件拥有唯一的 性文件(name=value)。这样做后,在属性文件中定义的属性可以作为变量在SQL Map配 置文件及其包含的所有SQL Map映射文件中引用。例如,如果属性文件中包含属性: driver=iver SQL Map配置文件及其每个映射文件都可以使用占位符${driver}来代表值 iver。例如: 这个元素在开发,测试和部署各阶段都很有用。它可以使在多个不同的环境中重新配置 应用和使用自动生成工具(如ANT)变得容易。属性文件可以从类路径中加载(使用resource 熟悉),也可以从合法的URL中加载(使用url属性)。例如,要加载固定路径的属性文件, 使用: 的属性都是可选的。下表列出了 maxRequests 同时执行SQL语句的最大线程数。大于这个值的线 Clinton Begin 著 刘涛(toleu@) 译 开发指南 iBATIS SQL Maps Page 12 of 62 程将阻塞直到另一个线程执行完成。不同的DBMS 有不同的限制值,但任何数据库都有这些限制。通 常这个值应该至少是maxTransactions(参见以下) 的10倍,并且总是大于maxSessions和 maxTranactions。减小这个参数值通常能提高性能。 例如:maxRequests=“256” 缺省值:512 maxSessions 同一时间内活动的最大session数。一个session可以 是代码请求的显式session,也可以是当线程使用 SqlMapClient实例(即执行一条语句)自动获得的 session。它应该总是大于或等于maxTransactions并 小于maxRequests。减小这个参数值通常能减少内存 使用。 例如:maxSessions=“64” 缺省值:128 同时进入ransaction()的最大线程 数。大于这个值的线程将阻塞直到另一个线程退出。 不同的DBMS有不同的限制值,但任何数据库都有 这些限制。这个参数值应该总是小于或等于 maxSessions并总是远远小于maxRequests。减小这 个参数值通常能提高性能。 例如:maxTransactions=“16” 缺省值:32 全局性地启用或禁用SqlMapClient的所有缓存 model。调试程序时使用。 例如:cacheModelsEnabled=“true” 缺省值:true(启用) 全局性地启用或禁用SqlMapClient的所有延迟加载。 调试程序时使用。 例子:lazyLoadingEnabled=“true” 缺省值:true(启用) enhancementEnabled 全局性地启用或禁用运行时字节码增强,以优化访 问Java Bean属性的性能,同时优化延迟加载的性能。 例子:enhancementEnabled=“true” 缺省值:false(禁用) 如果启用本属性,必须使用全限定名来引用mapped statement。Mapped statement的全限定名由sql-map 的名称和mapped-statement的名称合成。例如: maxTransactions cacheModelsEnabled lazyLoadingEnabled useStatementNamespaces Clinton Begin 著 刘涛(toleu@) 译 开发指南 iBATIS SQL Maps Page 13 of 62 queryForObject(“entName”); 例如:useStatementNamespaces=“false” 缺省值:false(禁用) 在SQL Map配置文件预定义了几个别名。它们是: 事务管理器别名 JDBC JTA EXTERNAL SIMPLE DBCP JNDI ansactionConfig nsactionConfig alTransactionConfi g DataSourceFactory taSourceFactory taSourceFactory Data Source Factory别名 1.0转换注意事项:SQL Map 1.0允许配置多个数据源。这引起了一些不好的实践。因此, 2.0版本只允许一个数据源。要使用多个部署/配置参数,您最好使用多个属性文件,不同的 系统使用不同的属性文件,或在创建SQL Map时传入不同的属性文件(参见下面的Java API)。 事务管理器类型。这个属性值可以是一个类名,也可以是一个别名。包含在框架的三个事务 管理器分别是:JDBC,JTA和EXTERNAL。
版权声明:本文标题:iBATIS开发指南 内容由热心网友自发贡献,该文观点仅代表作者本人,
转载请联系作者并注明出处:https://m.elefans.com/dianzi/1721115673a861064.html,
本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论