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月前
|
机器学习/深度学习
关于E-R(实体-联系)图
关于E-R(实体-联系)图
83 0
|
数据可视化 uml
UML图讲解(关联关系,单向关联,双向关联,自关联,组合关系,依赖关系,继承关系,实现关系)
UML图讲解,关联关系,单向关联,双向关联,自关联,组合关系,依赖关系,继承关系,实现关系。
1914 0
UML图讲解(关联关系,单向关联,双向关联,自关联,组合关系,依赖关系,继承关系,实现关系)
|
9月前
|
uml
UML关系与代码的映射
UML关系与代码的映射
|
9月前
|
uml
类与类的六种关系与UML图
类与类的六种关系与UML图
|
Java 数据库连接
hibernate一对多关系操作
hibernate一对多关系操作
139 1
hibernate一对多关系操作
实体,实体型,实体集,实体之间的联系
定义并解释概念模型中以下术语:实体,实体型,实体集,实体之间的联系。 (1)实体:客观存在并可以相互区分的事物叫实体。 (2)实体型:用实体名及其属性名集合来抽象和刻画同类实体称为实体型。 (3)实体集:同型实体的集合称为实体集。 (4)实体之间的联系:通常是指不同实体型的实体集之间的联系,实体之间的联系有一对一,一对多和多对多等多种类型。 ...
456 0
|
测试技术 数据库
Grails里DOMAIN类的一对一,一对多,多对多关系总结及集成测试
终于干完这一章节,收获很多啊。 和DJANGO有类似,也有不同。 User.groovy: package com.grailsinaction class User { String loginId String password Date dat...
1240 0
|
SQL 存储 缓存
Hibernate三种实体状态(五)
Hibernate三种实体状态(五)
222 0
Hibernate三种实体状态(五)
|
存储 Java 数据库连接
Hibernate的一对多映射的单向关联和双向关联(九)
Hibernate的一对多映射的单向关联和双向关联(九)
113 0
Hibernate的一对多映射的单向关联和双向关联(九)
|
uml
UML图中类之间的关系
类图中的关系大致一下几种 l 泛化 l 关联 l 依赖 l 组合 l 聚合  泛化 泛化是子集和超集的关系,常使用继承和实现来表示; 继承:子类到超类的实线和空心三角箭头表示 实现:子类到超类的虚线和空心三角箭头表示  依赖 依赖常常表示 一方(客户)知道另一方(提供者)并且另一方(提供者)有所改变时会对一方(客户)产生影响。
819 0