O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写。通俗点讲,就是将对象与关
系数据库绑定,用对象来表示关系数据。
在 O/R Mapping 的世界里,有两个基本的也是重要的东东需要了解,即 VO,PO。
VO,值对象(Value Object),PO,持久对象(Persisent
Object),它们是由一组属性和属性的 get 和 set 方法组成。从结构上看,它们并没有什么不同的地方。
但从其意义和本质上来看是完全不同的。
1.VO 是用 new 关键字创建,由 GC 回收的。
PO 则是向数据库中添加新数据时创建,删除数据库中数据时削除的。并且它只能存活在一个数据库
连接中,断开连接即被销毁。
2.VO 是值对象,精确点讲它是业务对象,是存活在业务层的,是业务逻辑使用的,它存活的目的就是
为数据提供一个生存的地方。
PO 则是有状态的,每个属性代表其当前的状态。它是物理数据的对象表示。使用它,可以使我们的
程序与物理数据解耦,并且可以简化对象数据与物理数据之间的转换。
3.VO 的属性是根据当前业务的不同而不同的,也就是说,它的每一个属性都一一对应当前业务逻辑所
需要的数据的名称。
PO 的属性是跟数据库表的字段一一对应的。
PO 对象需要实现序列化接口。
-------------------------------------------------
PO 是持久化对象,它只是将物理数据实体的一种对象表示,为什么需要它?因为它可以简化我们对于物
理实体的了解和耦合,简单地讲,可以简化对象的数据转换为物理数据的编程。VO 是什么?它是值对象,
准确地讲,它是业务对象,是生活在业务层的,是业务逻辑需要了解,需要使用的,再简单地讲,它是概
念模型转换得到的。
首先说 PO 和 VO 吧,它们的关系应该是相互独立的,一个 VO 可以只是 PO 的部分,也可以是多个 PO 构
成,同样也可以等同于一个 PO(当然我是指他们的属性)。正因为这样,PO 独立出来,数据持久层也
就独立出来了,它不会受到任何业务的干涉。又正因为这样,业务逻辑层也独立开来,它不会受到数据持
久层的影响,业务层关心的只是业务逻辑的处理,至于怎么存怎么读交给别人吧!不过,另外一点,如果
我们没有使用数据持久层,或者说没有使用 hibernate,那么 PO 和 VO 也可以是同一个东西,虽然这并
不好。
----------------------------------------------------
java 的(PO,VO,TO,BO,DAO,POJO)解释
PO(persistant object) 持久对象
在 o/r 映射的时候出现的概念,如果没有 o/r 映射,没有这个概念存在了。通常对应数据模型(数据库),本
身还有部分业务逻辑的处理。可以看成是与数据库中的表相映射的 java 对象。最简单的 PO 就是对应数
据库中某个表中的一条记录,多个记录可以用 PO 的集合。PO 中应该不包含任何对数据库的操作。
评论7