POJO、PO、DTO、VO、BO到底是什么?都如何使用?(基础概念+传输示意图+示例代码)带你一次玩转层出不穷的Object

本文主要是介绍POJO、PO、DTO、VO、BO到底是什么?都如何使用?(基础概念+传输示意图+示例代码)带你一次玩转层出不穷的Object,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、解释关系
  • 二、POJO、PO、DTO、VO、DAO、BO
    • 1.什么是POJO(Plain Old Java Object)
    • 2.什么是PO(Persistent Object)
    • 3.什么是DTO(Data Transfer Object)
    • 4.什么是VO(View Object)
    • 5.什么是DAO(Data Transfer Object)
    • 6.什么是BO(Business Object)


前言

提示:本文要记录的大概内容:
在某些项目中可能会把代码结构拆分得更加细致,所以本文主要是帮助各位朋友去理解这些容易混淆的“对象”。


提示:以下是本篇文章正文内容

一、解释关系

简单概念
在这里插入图片描述

实体传输对象示意图
在这里插入图片描述

二、POJO、PO、DTO、VO、DAO、BO

1.什么是POJO(Plain Old Java Object)

`POJO(Plain Old Java Object)
“简单java对象”,它包含业务逻辑处理或持久化逻辑等,但不是JavaBean、EntityBean等,不具有任何特殊角色,不继承或不实现任何其它Java框架的类或接口。
注意事项:
POJO是PO/DTO/VO的统称,禁止命名成xxxPOJO
代码示例(java):

public class Student{private Long id;private String name;private Integer age;private String address;// getters and setters...
}

2.什么是PO(Persistent Object)

PO :persistent object持久对象。
PO主要用于数据持久化层,与数据库表结构一一对应。
它封装了与数据库表相对应的数据字段,并通过ORM框架实现数据的加载和保存。
注意事项:
1、有时也被称为Data对象,对应数据库中的entity,可以简单认为一个PO对应数据库中的一条记录。
2、在hibernate持久化框架中与insert/delet操作密切相关。
3、PO中不应该包含任何对数据库的操作。
4、PO的属性是跟数据库表的字段一一对应的。
5、PO对象需要实现序列化接口。
代码示例(java):

public class UserPO {private Long id;private String username;private String password;// getters and setters...
}

3.什么是DTO(Data Transfer Object)

DTO (TO) :Data Transfer Object 数据传输对象。
主要用于远程调用等需要大量传输对象的地方。
可以将PO中的部分属性抽取出来,就形成了DTO。
举例说明:
比如我们一张表有100个字段,那么对应的PO就有100个属性。
但是我们界面上只要显示10个字段,客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,这时我们就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构.到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VO(View Object)。

4.什么是VO(View Object)

VO :value object 值对象 / view object 表现层(视图)对象。
主要用于表示层(如Web层)与客户端之间的数据传输。它包含了用于展示给最终用户的信息,这些信息可能与数据库中的表结构不完全一致。VO可以根据需要进行定制,以符合特定的展示需求。
使用场景:
定制符合特定的展示要求,用于展示给最终用户的信息,渲染HTML页面。
代码示例(java):

public class UserVO {private String username;private Integer age;// getters and setters...
}

5.什么是DAO(Data Transfer Object)

DAO :data access object 数据访问对象
主要用来封装对数据库的访问。通过它可以把POJO持久化为PO,用PO组装出来VO、DTO。
通常和PO结合使用,DAO中包含了各种数据库的操作方法。通过它的方法,结合PO对数据库进行相关的操作。夹在业务逻辑与数据库资源中间。配合VO,提供数据库的CRUD操作…
使用场景:
1、主要用来封装对DB(数据库)的访问(CRUD操作)。
2、通过接收业务层的数据,把POJO持久化为PO。
代码示例(java):

public interface UserDAO {UserPO getById(Long id);void save(UserPO userPO);void update(UserPO userPO);void deleteById(Long id);
}

6.什么是BO(Business Object)

BO是业务对象的缩写,通常由Service层输出的封装业务逻辑的对象。它负责处理来自表示层的请求,并调用持久化层的方法与数据库进行交互。
使用场景:BO主要用于业务层,封装了业务逻辑和业务规则。BO将复杂的业务逻辑封装在内部,通过对外提供接口供其他层调用。
举个例子:
比如一个简历,有教育经历、工作经历、社会关系等等。我们可以把教育经历对应一个PO,工作经历对应一个PO,社会关系对应一个PO。 建立一个对应简历的BO对象处理简历,每个BO包含这些PO。

代码示例:

import java.util.ArrayList;  
import java.util.List;  // 简历BO  
public class ResumeBO {  private List<EducationPO> educations;  private List<WorkExperiencePO> workExperiences;  private List<SocialRelationPO> socialRelations;  public ResumeBO() {  this.educations = new ArrayList<>();  this.workExperiences = new ArrayList<>();  this.socialRelations = new ArrayList<>();  }  // 添加教育经历  public void addEducation(EducationPO education) {  educations.add(education);  }  // 添加工作经历  public void addWorkExperience(WorkExperiencePO workExperience) {  workExperiences.add(workExperience);  }  // 添加社会关系  public void addSocialRelation(SocialRelationPO socialRelation) {  socialRelations.add(socialRelation);  }  // Getter方法(用于获取简历的各个部分)  public List<EducationPO> getEducations() {  return educations;  }  public List<WorkExperiencePO> getWorkExperiences() {  return workExperiences;  }  public List<SocialRelationPO> getSocialRelations() {  return socialRelations;  }  // ... 其他业务逻辑方法,如验证、转换DTO等  
}

特别感谢大家提供无价的知识,参考文章:
https://cloud.tencent.com/developer/article/2338920
https://cloud.tencent.com/developer/article/1973736
https://cloud.tencent.com/developer/article/2293953

这篇关于POJO、PO、DTO、VO、BO到底是什么?都如何使用?(基础概念+传输示意图+示例代码)带你一次玩转层出不穷的Object的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1102604

相关文章

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

关于@MapperScan和@ComponentScan的使用问题

《关于@MapperScan和@ComponentScan的使用问题》文章介绍了在使用`@MapperScan`和`@ComponentScan`时可能会遇到的包扫描冲突问题,并提供了解决方法,同时,... 目录@MapperScan和@ComponentScan的使用问题报错如下原因解决办法课外拓展总结@

mysql数据库分区的使用

《mysql数据库分区的使用》MySQL分区技术通过将大表分割成多个较小片段,提高查询性能、管理效率和数据存储效率,本文就来介绍一下mysql数据库分区的使用,感兴趣的可以了解一下... 目录【一】分区的基本概念【1】物理存储与逻辑分割【2】查询性能提升【3】数据管理与维护【4】扩展性与并行处理【二】分区的

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma