PO:persistant object 持久对象,可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。
VO:value object值对象。通常用于业务层之间的
数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要.
O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写。通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据。在O/R Mapping的世界里,有两个基本的也是重要的东东需要了解,即VO,PO。
VO,值对象(Value Object),PO,持久对象(Persisent Object),它们是由一组属性和属性的get和set方法组成。从结构上看,它们并没有什么不同的地方。但从其
意义和本质上来看是完全不同的。
一、VO是用new
关键字创建,由GC回收的。
PO则是向数据库中添加新数据时创建,删除数据库中数据时削除的。并且它只能存活在一个数据库连接中,断开连接即被销毁。
二、VO是值对象,精确点讲它是业务对象,是存活在业务层的,是业务逻辑使用的,它存活的目的就是为数据提供一个生存的地方。
PO则是有状态的,每个属性代表其当前的状态。它是物理数据的对象表示。使用它,可以使我们的程序与物理数据解耦,并且可以简化对象数据与物理数据之间的转换。
三、VO的属性是根据当前业务的不同而不同的,也就是说,它的每一个属性都一一对应当前业务逻辑所需要的数据的名称。
PO的属性是跟
数据库表的字段一一对应的。
PO对象需要实现
序列化接口。
相同点:
struts2和struts1都可以实现MVC的数据结构
不同点:
PO对象和VO对象都是javabean
PO对象:持久化对象(与数据库表的字段进行关联)
VO对象:值对象(与表单页面中的属性关联,获取表单页面的值)
struts1没有拦截器的概念,不能实现
类型转换,当使用struts1开发的时候,由于不能定义类型转换,要将VO对象转换成PO对象,才能保持
由于struts2实现了类型转换,在使用struts2开发的时候,简化了开发人员的代码(VO-->PO PO--->VO),直接将PO对象用做VO对象