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

相关文章

Java Lambda表达式的使用详解

《JavaLambda表达式的使用详解》:本文主要介绍JavaLambda表达式的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言二、Lambda表达式概述1. 什么是Lambda表达式?三、Lambda表达式的语法规则1. 无参数的Lambda表

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

深入解析 Java Future 类及代码示例

《深入解析JavaFuture类及代码示例》JavaFuture是java.util.concurrent包中用于表示异步计算结果的核心接口,下面给大家介绍JavaFuture类及实例代码,感兴... 目录一、Future 类概述二、核心工作机制代码示例执行流程2. 状态机模型3. 核心方法解析行为总结:三

Spring @RequestMapping 注解及使用技巧详解

《Spring@RequestMapping注解及使用技巧详解》@RequestMapping是SpringMVC中定义请求映射规则的核心注解,用于将HTTP请求映射到Controller处理方法... 目录一、核心作用二、关键参数说明三、快捷组合注解四、动态路径参数(@PathVariable)五、匹配请

Java 枚举的基本使用方法及实际使用场景

《Java枚举的基本使用方法及实际使用场景》枚举是Java中一种特殊的类,用于定义一组固定的常量,枚举类型提供了更好的类型安全性和可读性,适用于需要定义一组有限且固定的值的场景,本文给大家介绍Jav... 目录一、什么是枚举?二、枚举的基本使用方法定义枚举三、实际使用场景代替常量状态机四、更多用法1.实现接

python获取cmd环境变量值的实现代码

《python获取cmd环境变量值的实现代码》:本文主要介绍在Python中获取命令行(cmd)环境变量的值,可以使用标准库中的os模块,需要的朋友可以参考下... 前言全局说明在执行py过程中,总要使用到系统环境变量一、说明1.1 环境:Windows 11 家庭版 24H2 26100.4061

springboot项目中使用JOSN解析库的方法

《springboot项目中使用JOSN解析库的方法》JSON,全程是JavaScriptObjectNotation,是一种轻量级的数据交换格式,本文给大家介绍springboot项目中使用JOSN... 目录一、jsON解析简介二、Spring Boot项目中使用JSON解析1、pom.XML文件引入依

Java中的record使用详解

《Java中的record使用详解》record是Java14引入的一种新语法(在Java16中成为正式功能),用于定义不可变的数据类,这篇文章给大家介绍Java中的record相关知识,感兴趣的朋友... 目录1. 什么是 record?2. 基本语法3. record 的核心特性4. 使用场景5. 自定

Python使用Tkinter打造一个完整的桌面应用

《Python使用Tkinter打造一个完整的桌面应用》在Python生态中,Tkinter就像一把瑞士军刀,它没有花哨的特效,却能快速搭建出实用的图形界面,作为Python自带的标准库,无需安装即可... 目录一、界面搭建:像搭积木一样组合控件二、菜单系统:给应用装上“控制中枢”三、事件驱动:让界面“活”