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转化而来的.

posted @ 2020-03-07 21:50  狼_少_年  阅读(1306)  评论(0编辑  收藏  举报