iBatis2实体状态图解

简介:
环境:
iBatis2、Hibernate3、Java5
 
大名鼎鼎的iBatis和Hibernate齐名为ORM持久化的两大英雄。相比来说,Hibernate是重量级的,iBatis是轻量级的。
 
与Hibernate相似,iBatis也是通过实体对象来操作数据的,iBatis的实体对象也有三种状态:临时态、持久化态、游离态。只是在概念上,iBatis不怎么区别这个,因为iBatis没有hibarnate复杂。
 
为了说明iBatis的状态,请看下面的简图:
 
1、临时态:实体刚被new出来。
2、持久化态:用实体对象作为参数调用了insert方法。此时,如果,实体对象对应的表为自增的,则插入后,表的主键会回填到此实体中。这样,在保存后,不但可以返回一个持久化的实体,也可以返回新增记录的id。
3、游离态:对象持久化后,连接关闭,对象不和任何的连接有关系了。这时候,持久化态的对象就转变为游离态。游离态的对象可以通过update方法,重新持久化。
 
从中可以发现,iBatis尽可能少的去维护内存中实体对象的状态,对于内存中实体对象的状态, iBatis仅维护从临时态到持久化态的实体对象。也就是说,从临时态的实体持久化后,iBatis会回填实体的id字段,以保证实体对象状态的“可持续”使用。因为我们在保存一个对象后,往往需要立即得到该对象,并做进一步处理,或用到别处,这样可以选择返回该实体对象或者返回其id。
 
相对于Hibernate,Hibernate维护了实体关系的个个状态,Hibernate基本的API接口中都是以对象为参数的。为了维护状态的统一,Hibernate内部对对象的状态的管理也做得相当复杂。Hibernate能在其所有对实体的操作上,保持实体对象状态在内存中的正确性。
 
但是iBatis不然,比如,一个对象被getById()找到了得到一个entity,但是接着又进行了一个deleteById()操作,这时候,先前被查询出来的entity实体对象中的id不会因为调用deleteById()而自动消失,但Hibernate是可以的。
 
在Hibernate和iBatis中,很难说出个孰优孰劣,因为复杂方便的同时带来了性能的消耗。iBatis的做法是将钢用到刀刃上。
 
另外,为了对比Hibernate的持久化的状态图,我引用一个博友的图吧(用的仅仅是连接):
 
 
 
总结:
玩ORM,熟悉ORM对实体对象的管理方式是非常重要的。用贯了Hibernate的开发者,在转向iBatis的时候尤其应该注意这些差别。另外反复强调一点,iBatis在insert一个对象后,可以返回新增记录的id,也可以返回持久化对象。因为这是iBatis对内存对象状态所做的唯一的同步管理。

本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/106953,如需转载请自行联系原作者

相关文章
|
9月前
|
uml
UML关系与代码的映射
UML关系与代码的映射
|
9月前
|
SQL uml
UML关系-代码体现
UML关系-代码体现
42 0
|
9月前
|
uml
UML中的关系
UML中的关系
75 0
|
9月前
|
uml
类与类的六种关系与UML图
类与类的六种关系与UML图
|
11月前
|
Java
java 一对多、多对多关系示例
java 一对多、多对多关系示例
244 0
|
Java 数据库连接
hibernate一对多关系操作
hibernate一对多关系操作
139 1
hibernate一对多关系操作
|
测试技术 uml C++
【UML】------四种关系
【UML】------四种关系
88 0
【UML】------四种关系
一张图搞定java类之间的6种关系,以后再也不怕画UML图了
java的类之间的关系:泛化、依赖、关联、实现、聚合、组合
一张图搞定java类之间的6种关系,以后再也不怕画UML图了
|
SQL 存储 缓存
Hibernate三种实体状态(五)
Hibernate三种实体状态(五)
222 0
Hibernate三种实体状态(五)
|
uml
UML六种关系
Created by Wang, Jerry on Nov 29, 2014
100 0
UML六种关系