JavaBean、POJO、VO、DTO、DO、PO之间的区别
之前对于vo,JavaBean,pojo等实体类之间的概念和关系很模糊,不清楚他们都用在什么位置.今天我们就来谈谈这些不同的实体类.
一、avaBean,其实准确地说JavaBean是符合一定规范编写出来的Java类,这些特定的约定包括:
1.类中所有的属性都是私有属性(private)
2.类中必须有一个无参的构造器
3.类中每个属性有其对应的getter和setter方法
4.类实现序列化接口(serializable)
5.类中可以存在其他的方法
下面是一个典型的JavaBean类:
import java.io.Serializable; public class People implements Serializable {//实现序列化接口 private static final long serialVersionUID = -3641410835329960076L; private String name; private Integer age; //无参构造器 public People() { } public String getName() { return name; } public Integer getAge() { return age; } public void setName(String name) { this.name = name; } public void setAge(Integer age) { this.age = age; } //此外,JavaBean内部还可以定义其他方法 public String getNickname(){ return "我的外号是狼少年"; } }
二、Pojo(Plain Ordinary Java Object)
翻译过来即是普通Java对象,其特点:
1.类中只有一些属性及其对应的getter和setter方法.
2.类中没有业务逻辑,也就不具备处理业务逻辑的能力.
3.Pojo主要作为数据存储的载体来进行数据的临时传递.
4.Pojo不继承任何类,也没有实现任何接口.
下面举例:
public class People { private String name; private Integer age; public String getName() { return name; } public Integer getAge() { return age; } public void setName(String name) { this.name = name; } public void setAge(Integer age) { this.age = age; } }
三、第三部分将VO,DTO,DO,PO放在一起说明
首先分别简述以上四者的概念
1.VO (View Object)属于视图对象,对应页面所显示的数据,并将所有数据进行封装,类中属性和和数据库表一一对应,也可以不对应,具体看业务需求
2.DTO(Data Transfer Object) 属于数据传输对象,主要是视图层与服务层之间的数据传输,多数情况下,DTO内的数据来自多个表
3.DO(Domain Object) 属于领域对象,可以理解为抽象出来的有形或者无形的业务实体类
4.PO(Persistent Object) 属于持久化对象,也被称为Data对象,其属性与数据库中表字段形成映射关系,也就是说PO的每一个属性都对应数据库表中的每一个字段
说完概念,感觉还是一脸懵逼,不过对于这四者之间的关系,我在网上找到了一幅图
大致描述一下图中的流程:
首先,客户端发送了一个请求,比如说是一个表单的提交,那么表单内所包含的数据,在视图层就称为VO.VO传递到视图层后,视图层将VO转为DTO传送到服务层.然后服务层会将DTO转为DO,调用DO的业务方法完成具体业务,紧接着,服务层再把DO转为PO传递给持久层,完成持久化.逆向同理.
其实VO和DOT的属性基本是一样的,之所以有着不同的叫法,是从设计层角度来说的.VO表示的是视图层显示的所有数据,而DOT表示的则是服务层接收和返回的数据.
四、VO,DTO,DO,PO与第二部分所说的Pojo之间又是什么关系呢?
这里需要强调的是DO,它比较特殊的, DO具有业务方法逻辑,如果直接把DO传递给视图层,展示层的代码就可以绕过服务层直接调用它不应该访问的操作.所以DO不是简单的Pojo,而其他三者其实通常来说,都是由Pojo转化而来的.