深入解析VO、PO、DTO:业务层数据传递与持久化对象的差异
值:值对象
通常用于业务层之间的数据传输,由new创建,由GC回收。
采购订单
:持久层对象
对应数据库中表的字段。
VO和PO都是属性加上属性的get和set方法;表面上看起来没有什么不同,但含义却完全不同。
数据传输组织
data:数据传输对象。
表中有十多个字段:id、name、(男/女)、age、(如001)...
页面需要显示四个字段:姓名、(男/女)、年龄、(如今日头条有限公司)。
DTO由此生成。一是可以提高数据传输的速度(减少传输字段数),二是可以隐藏后端表结构。
博
:业务对象
BO将业务逻辑封装到一个对象中。
我理解它是 PO 的组合。例如,投保人是PO,被保险人是PO,保险类型信息是PO等,它们的组合就是第一个保单的BO。
波乔
“Plain Java”,简单普通的java对象。主要用来指代不遵循特定Java对象模型、约定或框架的对象。
它不继承任何类,不实现任何接口,不存在其他框架侵入的java对象。
传统意义上的纯Java对象,最基本的Java Bean只有属性加上属性的get和set方法。 (其中往往封装了一些简单的逻辑)
可转换为PO、DTO、VO;例如POJO在传输过程中就是DTO。
豆
它是用JAVA语言编写的可重用组件。符合一定规范编写的Java类不是一种技术,而是一种规范。基于这个规范,我们总结了很多开发技巧和工具功能。符合此规范的类可以被其他程序员或框架使用。其方法命名、构造和行为必须符合特定约定:
所有属性都是。
此类必须有一个公共默认构造函数。也就是提供一个无参构造函数。
使用 和 访问此类的属性,其他方法遵循标准命名约定。
这个类应该是可序列化的。实现接口。
由于这些要求主要依赖于约定而不是实现接口,因此许多开发人员将 POJO 视为遵守特定的命名约定。
POJO 和 Bean 有什么区别?
POJO实际上是一个更简单、更纯粹的类或接口。 POJO严格遵循简单对象的概念,有的常常封装一些简单的逻辑。
POJO主要用于数据的临时传输。它只能加载数据,作为数据存储的载体,但不具备处理业务逻辑的能力。
虽然数据获取和POJO一样,但是还可以有其他方法。
波乔:
public class BasicInfoVo {
private String orderId;
private Integer uid;
public String getOrderId() {
return orderId;}
public void setOrderId(String orderId) {
this.orderId = orderId;}
public Integer getUid() {
return uid;}
public void setUid(Integer uid) {
this.uid = uid;
}}
豆子:
public class UserInfo implements java.io.Serializable{
//实现serializable接口。
private static final long serialVersionUID = 1L;
private String name;
private int age;
//无参构造器
public UserInfo() {
}
public String getName() {
return name; }
public void setName(String name) {
this.name = name; }
public int getAge() {
return age; }
public void setAge(int age) {
this.age = age; }
//javabean当中可以有其它的方法
public void userInfoPrint(){
System.out.println("");
} }
DAO
data:数据访问对象
它主要用于封装对数据的访问。注意,是访问数据,而不是访问数据库。
实体 bean 通常用于 ORM 对象关系映射。实体映射到表中,一般没有业务逻辑代码。
负责将数据库中的表记录映射到内存中的对象。事实上,创建一个对象就相当于创建一条记录。删除一个对象会同时从数据库中删除相应的记录。当修改一个Bean时,容器会自动改变该Bean的状态。与数据库同步。