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

news2024/12/28 10:16:34

文章目录

  • 前言
  • 一、解释关系
  • 二、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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2069500.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

缓冲区

原理 #include <stdio.h> #include <string.h> int main() { const char *msg0"hello printf\n"; const char *msg1"hello fwrite\n"; const char *msg2"hello write\n"; printf("%s", msg0); fwrite(msg1, strlen(msg0)…

MySQL 数据页详解

数据页是MySQL 中定义的的一个存储结构 数据页是保存数据行的容器 页的16KB的大小是MySQL的⼀个默认设置&#xff0c;可以适用于⼤多数场景&#xff0c;当然也可以根据自己的实际业务场景进行修改页的大小&#xff0c;通过系统变量 innodb_page_size 进行调整与查看&#xff…

可计量Agilent N5181A详情资料keysight N5182A模拟信号发生器

Keysight N5181A&#xff08;Agilent&#xff09;MXG RF 模拟信号发生器的功能和规格包括&#xff1a;信号特性&#xff1a; 100 kHz 至 1、3 或 6 GHz 1 GHz 时输出功率为 23 dBm -121 dBc/Hz&#xff08;典型值&#xff09;相位噪声&#xff08;1 GHz 和 20 kHz 偏移&…

程序员常用的十个PyCharm插件,学会工作都不用加班了!

安装方法 先来说说插件的安装方法&#xff0c;一点都不难。 选择顶部菜单栏的 PyCharm 选项&#xff0c;打开 Preferences &#xff0c;点击 plugins &#xff0c;在右侧的文本框中输入想要查看的插件名称&#xff0c;在下方就会罗列出已经安装的相关的插件。 找到我们所需要的…

虹猫ai推文软件官方

虹猫AI推文软件是一款由虹猫小队开发的人工智能推文工具。该软件通过训练深度学习模型&#xff0c;能够自动生成优质的推文内容&#xff0c;帮助用户快速撰写出吸引人的推文。 虹猫ai推文软件官方https://iimenvrieak.feishu.cn/docx/O0UedptjbonN4UxyEy7cPlZknYc 虹猫AI推文软…

在Windows下安装设置VirtualBox

文章目录 一、下载VirtualBox二、安装VirtualBox三、安装虚拟机 一、下载VirtualBox 下载地址 直链下载 二、安装VirtualBox 打开下载好的安装包&#xff0c;点击下一步 根据自己的需求选择安装功能&#xff0c;之后选择安装目录&#xff0c;完成后下一步 提前注意是否有…

棚子影院CMS程序PHP源码

01, 棚子影视是我现在最常用的一个看视频的网站&#xff0c;支持观看电影、国漫&#xff01;动漫&#xff0c;电视剧、综艺、记录片、香港剧等等。同时棚子影视支持手机&#xff0c;PC端在线观看&#xff0c;不用下载任何播放器&#xff0c;直接电脑或者手机打开网址就可以在线…

自动化脚本到LabVIEW转换

工业自动化领域中的专用脚本语言转换为LabVIEW时需要注意的问题 语法差异&#xff1a; 脚本语言特点&#xff1a; 工业自动化脚本语言通常具有特定的语法和结构&#xff0c;例如条件判断、循环控制、硬件指令等。这些语言直接面向硬件操作&#xff0c;语法简洁&#xff0c;适用…

Python编码系列—Python单元测试的艺术:深入探索unittest与pytest

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

[数据集][目标检测]考场行为作弊检测数据集VOC+YOLO格式4413张4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;4413 标注数量(xml文件个数)&#xff1a;4413 标注数量(txt文件个数)&#xff1a;4413 标注…

LeetCode33

445.两数相加Ⅱ 给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数字都不会以零开头。 示例1&#xff1a; 输入&#xff1a;l1 [7,2,4,3…

SD Maid SE v1.2.3 — 老牌清理工具全面升级,更简洁,更流畅了

SD Maid&#xff08;SD女佣&#xff09;是一款老牌的安卓垃圾清理神器&#xff0c;支持手机文件概览、文件搜索、应用管理、卸载残留、系统清理、应用清理、重复文件以及存储分析等多种实用功能。近期推出的SD Maid SE采用了全新的架构和技术&#xff0c;全面兼容最新的安卓版本…

如何高效利用ChatGPT撰写论文:从初稿到终稿的全程精华指南

在近年来的人工智能快速发展中&#xff0c;自然语言处理领域尤其显著&#xff0c;其中ChatGPT作为OpenAI推出的先进语言模型&#xff0c;不仅在日常交互上表现出众&#xff0c;其在专业写作方面也展现了巨大潜力。本文将详尽介绍如何高效地利用ChatGPT来撰写和修改学术论文&…

【Linux篇】Linux命令基础

目录 1. Linux的目录结构 1.1 Linux的目录结构 1.2 /在Linux系统中的表示 2. linux命令基础 2.1 什么是命令和命令行 2.2 Linux命令的通用格式 2.3 ls命令 2.3.1 ls命令的参数的作用&#xff1a; 2.3.2 ls命令的选项 2.3.3 命令的选项组合使用 2.4 cd切换工作目录 2…

YOLOv8多种方法改进CBAM注意力机制有效提升检测精度(已跑通)

一、CBAM概念 CBAM&#xff08;Convolutional Block Attention Module&#xff09;是一种用于卷积神经网络&#xff08;CNN&#xff09;的注意力机制&#xff0c;旨在提高网络的表现能力。它通过引入两个注意力模块来增强特征图的表达能力。 二、源码&#xff1a; class Chan…

AI 产品的五种交互模式

我们不是在创造人工智能&#xff0c;我们是在创造智能的控制者 —— James Barrat 历史 回顾计算机交互的演变历程&#xff0c;经历了批处理—命令行式交互—图形界面交互&#xff0c;AI 的出现带来了自然语言交互&#xff0c;基于人类的意图完成输出。 早期的批处理系统古朴…

uefi模式无法读取u盘启动怎么办_uefi模式无法读取u盘启动解决方法

最近有网友问我uefi模式下我按快捷方式或bios中都认别不了U盘&#xff0c;无法正常选择u盘启动进入pe安装系统&#xff0c;出现这种情况一般是bios中设置了uefi模式&#xff0c;而制作的u盘启动不支持uefi启动导致&#xff0c;那么uefi模式无法读取U盘启动怎么办&#xff1f;下…

摄影曝光:曝光模式认知

写在前面 理解不足小伙伴帮忙指正 &#x1f603;,生活加油 99%的焦虑都来自于虚度时间和没有好好做事&#xff0c;所以唯一的解决办法就是行动起来&#xff0c;认真做完事情&#xff0c;战胜焦虑&#xff0c;战胜那些心里空荡荡的时刻&#xff0c;而不是选择逃避。不要站在原地…

万亿低空经济赛道,如何抢占先机?

在万亿低空经济赛道中抢占先机&#xff0c;需要企业在多个方面进行全面布局和战略规划。以下是一些关键策略&#xff1a; 一、明确低空经济的定义和潜力 低空经济作为战略性新兴产业和未来产业&#xff0c;已经上升为国家经济工作重点。它是指各类低空航空器在飞行活动中所关…

工商业光伏项目如何顺利运行

工商业光伏项目如何顺利运行 鹧鸪云 工商业光伏可以细分为两大类&#xff0c;一类是针对工业企业的光伏项目&#xff0c;另一类则是针对商业企业的光伏项目。工业企业光伏项目通常是指在工厂、工业园区等工业用地安装光伏系统&#xff0c;利用太阳能发电&#xff0c;以满足工…