iBATIS开发指南.docx

上传人:b****5 文档编号:3369538 上传时间:2022-11-22 格式:DOCX 页数:59 大小:48.23KB
下载 相关 举报
iBATIS开发指南.docx_第1页
第1页 / 共59页
iBATIS开发指南.docx_第2页
第2页 / 共59页
iBATIS开发指南.docx_第3页
第3页 / 共59页
iBATIS开发指南.docx_第4页
第4页 / 共59页
iBATIS开发指南.docx_第5页
第5页 / 共59页
点击查看更多>>
下载资源
资源描述

iBATIS开发指南.docx

《iBATIS开发指南.docx》由会员分享,可在线阅读,更多相关《iBATIS开发指南.docx(59页珍藏版)》请在冰豆网上搜索。

iBATIS开发指南.docx

iBATIS开发指南

IBATISDeveloper’sGuideVersion1.0

September2,2004Somanyopensourceprojects.WhynotOpenyourDocuments?

OpenDocSeries’

iBATIS2.0开发指南

 

ibatis开发指南

ibatisQuickStart............................................................................................5

准备工作..........................................................................................................5

构建ibatis基础代码....................................................................................5

ibatis配置...........................................................................................................11

ibatis基础语义......................................................................................................16

XmlSqlMapClientBuilder...................................................................16

SqlMapClient...........................................................................................16

SqlMapClient基本操作示例..........................................................16

OR映射...........................................................................................................19

ibatis高级特性......................................................................................................26

数据关联........................................................................................................26

一对多关联............................................................................................26

一对一关联............................................................................................28

延迟加载........................................................................................................30

动态映射........................................................................................................31

事务管理........................................................................................................35

基于JDBC的事务管理机制................................................................35

基于JTA的事务管理机制...................................................................36

外部事务管理.........................................................................................38

Cache..............................................................................................................39

MEMORY类型Cache与WeakReference........................................40

LRU型Cache.......................................................................................42

FIFO型Cache......................................................................................43

OSCache.................................................................................................43

IBATISDeveloper’sGuideVersion1.0

September2,2004Somanyopensourceprojects.WhynotOpenyourDocuments?

ibatis开发指南

相对Hibernate和ApacheOJB等“一站式”ORM解决方案而言,ibatis是一种“半

自动化”的ORM实现。

所谓“半自动”,可能理解上有点生涩。

纵观目前主流的ORM,无论Hibernate还是

ApacheOJB,都对数据库结构提供了较为完整的封装,提供了从POJO到数据库表的全

套映射机制。

程序员往往只需定义好了POJO到数据库表的映射关系,即可通过Hibernate

或者OJB提供的方法完成持久层操作。

程序员甚至不需要对SQL的熟练掌握,

Hibernate/OJB会根据制定的存储逻辑,自动生成对应的SQL并调用JDBC接口加以执

行。

大多数情况下(特别是对新项目,新系统的开发而言),这样的机制无往不利,大有一

统天下的势头。

但是,在一些特定的环境下,这种一站式的解决方案却未必灵光。

在笔者的系统咨询工作过程中,常常遇到以下情况:

1.系统的部分或全部数据来自现有数据库,处于安全考虑,只对开发团队提供几

条SelectSQL(或存储过程)以获取所需数据,具体的表结构不予公开。

2.开发规范中要求,所有牵涉到业务逻辑部分的数据库操作,必须在数据库层由

存储过程实现(就笔者工作所面向的金融行业而言,工商银行、中国银行、交

通银行,都在开发规范中严格指定)

3.系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高

度优化的SQL语句(或存储过程)才能达到系统性能设计指标。

面对这样的需求,再次举起Hibernate大刀,却发现刀锋不再锐利,甚至无法使用,

奈何?

恍惚之际,只好再摸出JDBC准备拼死一搏……,说得未免有些凄凉,直接使用JDBC

进行数据库操作实际上也是不错的选择,只是拖沓的数据库访问代码,乏味的字段读取操作

令人厌烦。

“半自动化”的ibatis,却刚好解决了这个问题。

这里的“半自动化”,是相对Hibernate等提供了全面的数据库封装机制的“全自动化”

ORM实现而言,“全自动”ORM实现了POJO和数据库表之间的映射,以及SQL的自动

生成和执行。

而ibatis的着力点,则在于POJO与SQL之间的映射关系。

也就是说,ibatis

并不会为程序员在运行期自动生成SQL执行。

具体的SQL需要程序员编写,然后通过映

射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。

使用ibatis提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象,

这一层与通过Hibernate实现ORM而言基本一致,而对于具体的数据操作,Hibernate

会自动生成SQL语句,而ibatis则要求开发者编写具体的SQL语句。

相对Hibernate等

“全自动”ORM机制而言,ibatis以SQL开发的工作量和数据库移植性上的让步,为系___________统

设计提供了更大的自由空间。

作为“全自动”ORM实现的一种有益补充,ibatis的出现显

得别具意义。

IBATISDeveloper’sGuideVersion1.0

September2,2004Somanyopensourceprojects.WhynotOpenyourDocuments?

ibatisQuickStart

准备工作

1.下载ibatis软件包()。

2.创建测试数据库,并在数据库中创建一个t_user表,其中包含三个字段:

Øid(int)

Øname(varchar)

Øsex(int)。

3.为了在开发过程更加直观,我们需要将ibatis日志打开以便观察ibatis运作的细节。

ibatis采用Apachecommon_logging,并结合Apachelog4j作为日志输出组件。

CLASSPATH中新建log4j.properties配置文件,内容如下:

log4j.rootLogger=DEBUG,stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%c{1}-%m%n

log4j.logger.java.sql.PreparedStatement=DEBUG

构建ibatis基础代码

ibatis基础代码包括:

1.ibatis实例配置

一个典型的配置文件如下(具体配置项目的含义见后):

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEsqlMapConfig

PUBLIC"-//iBATIS.com//DTDSQLMapConfig2.0//EN"

"

cacheModelsEnabled="true"

enhancementEnabled="true"

lazyLoadingEnabled="true"

errorTracingEnabled="true"

maxRequests="32"

maxSessions="10"

maxTransactions="5"

useStatementNamespaces="false"

/>

IBATISDeveloper’sGuideVersion1.0

September2,2004Somanyopensourceprojects.WhynotOpenyourDocuments?

value="com.p6spy.engine.spy.P6SpyDriver"/>

value="jdbc:

mysql:

//localhost/sample"/>

value="10"/>

value="120000"/>

ACCOUNT"/>

value="1"/>

value="1"/>

2.POJO(PlainOrdinaryJavaObject)

下面是我们用作示例的一个POJO:

publicclassUserimplementsSerializable{

privateIntegerid;

privateStringname;

privateIntegersex;

privateSetaddresses=newHashSet();

/**defaultconstructor*/

publicUser(){

}

publicIntegergetId(){

returnthis.id;

IBATISDeveloper’sGuideVersion1.0

September2,2004Somanyopensourceprojects.WhynotOpenyourDocuments?

}

publicvoidsetId(Integerid){

this.id=id;

}

publicStringgetName(){

returnthis.name;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicIntegergetSex(){

returnthis.sex;

}

publicvoidsetSex(Integersex){

this.sex=sex;

}

}

3.映射文件

与Hibernate不同。

因为需要人工编写SQL代码,ibatis的映射文件一般采

用手动编写(通过Copy/Paste,手工编写映射文件也并没想象中的麻烦)。

针对上面POJO的映射代码如下:

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEsqlMap

PUBLIC"-//iBATIS.com//DTDSQLMap2.0//EN"

"

parameterClass="java.lang.String"

resultClass="user">

[CDATA[

select

name,

sex

fromt_user

IBATISDeveloper’sGuideVersion1.0

September2,2004Somanyopensourceprojects.WhynotOpenyourDocuments?

wherename=#name#

]]>

parameterClass="user">

[CDATA[

UPDATEt_user

SET

name=#name#,

sex=#sex#

WHEREid=#id#

]]>

parameterClass="user"

>

INSERTINTOt_user(

name,

sex)

VALUES(

#name#,

#sex#

parameterClass="java.lang.String">

deletefromt_user

whereid=#value#

从上面的映射文件可以看出,通过