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

元素....................................................................................................................11

元素.........................................................................................................................11

元素.....................................................................................................................13

元素....................................................................................................13

元素...........................................................................................................14

元素........................................................................................................................15

SQL Map XML映射文件..............................................................................................................17

18

Statement的类型............................................................................................................18

SQL 语句.......................................................................................................................19

自动生成的主键.............................................................................................................20

存储过程.........................................................................................................................20

21

21

Inline Parameter简介.....................................................................................................22

22

23

23

24

Parameter Map 和 .24

元素............................................................................................................25

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配置文件拥有唯一的元素,用于在配置文件中使用标准的Java属

性文件(name=value)。这样做后,在属性文件中定义的属性可以作为变量在SQL Map配

置文件及其包含的所有SQL Map映射文件中引用。例如,如果属性文件中包含属性:

driver=iver

SQL Map配置文件及其每个映射文件都可以使用占位符${driver}来代表值

iver。例如:

这个元素在开发,测试和部署各阶段都很有用。它可以使在多个不同的环境中重新配置

应用和使用自动生成工具(如ANT)变得容易。属性文件可以从类路径中加载(使用resource

熟悉),也可以从合法的URL中加载(使用url属性)。例如,要加载固定路径的属性文件,

使用:

元素

元素用于配置和优化SqlMapClient实例的各选项。元素本身及其所有

的属性都是可选的。下表列出了元素支持的属性及其功能:

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)。

元素让您为SQL Map配置事务管理服务。属性type指定所使用的

事务管理器类型。这个属性值可以是一个类名,也可以是一个别名。包含在框架的三个事务

管理器分别是:JDBC,JTA和EXTERNAL。

本文标签: 使用属性对象参数类型