1.POJO
POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。
POJO (Plain Old Java Object),是MartinFowler等发明的一个术语,用来表示普通的Java对象,不是JavaBean, EntityBean 或者 SessionBean。POJO不担当任何特殊的角色,也不实现任何特殊的Java框架的接口如,EJB,JDBC等等。
也就是说POJO就是一个简单的普通的Java对象,它不包含业务逻辑或持久逻辑等,但也不是JavaBean、EntityBean等,不具有任何特殊角色,也不继承或不实现任何其它Java框架的类或接口。
2.PO
PO(Persistent Object 持久化对象)
最形象的理解就是一个PO就是数据库中的一条记录。好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象。只有属性和set,get方法。
PO对象一般对应着表结构,由DO对象进过持久化得到PO对象(比如,通过ORM将其持久化)。转化为持久化对象PO后则可以与数据库进行交互。
如:
public class Book {
private Integer id;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
一个PO有三种状态:
1.transient:瞬态或者自由态
未被持久化的VO(View Object),此时就是一个内存对象VO,由JVM管理生命周期。
2.persistent:持久化状态
已被持久化的PO,并且在Session生命周期内,此时映射数据库连接,由数据库管理生命周期。
3.detached:脱管状态或者游离状态
曾被持久化过,但现在和Session已经托管(detached)了,以VO的身份在运行。它还可以进入另一个Session,继续PO状态管理。
它的状态转换情况如图:
当通过get或load方法得到的po对象它们都处于persistent,但如果执行delete(po)时(但不能执行事务),该po状态就处于detached,(表示和session脱离关联),因delete而变成游离态可以通过save或saveOrUpdate()变成持久态。
当把session关闭时,session缓存中的persistent的po对象也变成detached因关闭session而变成游离态的可以通过lock、save、update变成持久态持久态实例可以通过调用delete()变成脱管状态。通过get()或load()方法得到的实例都是持久化状态的。
3.VO
VO(View Object)视图对象,它的作用是把某个指定页面(或组件)的所有数据封装起来,主要用于前台页面与表示层之间。(如:表单数据)
VO(View Object)一般用于封装前端页面传递到Action/Controller的所有参数,但是这些参数并不一定完全与数据库中表的所有字段均匹配。
4.DTO
DTO(Data Transfer Object) 数据传输对象, 这个概念来源于J2EE的设计模式,原目的是为EJB的分布式应用提供粗粒度的数据实体,从而减少分布式调用的次数,得到提高分布式调用的性能和降低网络负载的目的
DTOs 一般被创建为 POJOs。它们是平整的数据结构,不包含业务逻辑,仅仅有存储、访问和最终关联序列化或解析的方法。数据从领域模型映射为 DTO,一般通过在表示层或外观层的 mapper 组件。组件间的交互如下图所示:
对于DTO的使用,DTO 在带有远程调用的系统中出现,因为它帮助减少了调用的次数。当领域模型有多种不同对象组成,并且表示层模型甚至一次需要它们的全部数据时,DTO 也能帮忙减少在客户端和服务器间的往返。使用 DTO,我们能从领域模型中构建不同的视角,允许我们创造相同域但优化它们为不影响域设计的客户端的需求的其它表示。这样的灵活性是一个解决复杂问题的强力工具。