PO、BO、VO、DTO、DAO、POJO

news2024/11/12 13:12:00

文章目录

  • PO(Persistant Object)持久对象
  • DO(Data Object)数据对象
  • AO(Application Object)应用对象
  • BO(Business Object)业务对象
  • VO(Value Object)表现对象
  • DTO(Data Transfer Object)数据传输对象
  • DAO(Data Access Object)数据访问对象
  • POJO(Plain Ordinary Java Object)简单Java对象
  • 实例

PO(Persistant Object)持久对象

PO是持久化对象,用于表示数据库中的一条记录映射成的Java对象,类中应该都是基本数据类型和String,而不是更复杂的类型,因为要和数据库表字段对应。PO仅仅用于表示数据,不对数据进行操作,拥有get和set方法。对象类中的属性对应数据库表中的字段,有多少个字段就有多少个属性,完全匹配。遵循JavaBean规范,拥有get和set方法。如下图所示:
在这里插入图片描述

DO(Data Object)数据对象

数据对象,与数据库表结构一一对应,通过dao层向上传输数据对象,属性和PO中的基本一致。

AO(Application Object)应用对象

在Web层与Service层之间抽象的复用对象模型,极为贴近展示层,复用度不高。

BO(Business Object)业务对象

BO是实际的业务对象,会参与业务逻辑的处理操作,里面可能会包含多个类,用于表示一个业务对象。例如用户可以拥有宠物,在这里把用户对应一个PO、宠物对应一个PO,那么建立一个对应的BO对象来处理用户和宠物的关系,每个BO都包含用户PO和宠物PO,而处理逻辑时针对BO去处理。遵循JavaBean规范,拥有get和set方法。例如:(注:User和Pet都是PO对象,但会放进BO中,形成一个复杂的业务对象。)

但注意,BO又包括了业务逻辑,通常在service层,封装了对DAO层的调用,可以进行PO与VO/DTO之间的转换。

VO(Value Object)表现对象

VO对象主要用于前端界面显示的数据,是与前端进行交互的Java对象,但这里是不用PO传递数据的,因为PO包括数据库表中的所有字段,对于前端来说我们只需要显示一部分字段就可以了,例如我们的用户表user中的password(密码)字段、phone(电话)字段、insert_time(插入时间)字段是没有必要也不能显示在前端界面的。遵循JavaBean规范,拥有get和set方法。

DTO(Data Transfer Object)数据传输对象

数据传输对象是在传递给前端时使用的,如一张表有100个字段,那么对应的PO就有100个属性,但是我们的前端界面只需要显示10个字段,所以我们没必要把所有字段的PO对象传递到客户端,我们只需要把只有这10个属性的DTO对象传递到客户端,不会暴露服务端的表结构,到达客户端后,如果这个对象用于界面表示,那么它的身份就是VO对象。

DTO和VO概念相似,通常情况下字段也基本一致。但有所不同,DTO表示一个数据传输对象,是在服务端用于不同服务或不同层之间的数据传输,例如dao层到service层,service层到web层;而VO是在客户端浏览器显示的表现对象,用于在浏览器界面数据的显示。

DAO(Data Access Object)数据访问对象

DAO是主要封装对数据库的访问,例如UserDao封装的就是对user表的增删改查操作。

通过它可以把POJO持久化为PO,用PO组装出VO和DTO。

DAO一般在持久层,完全封装数据库操作,对外暴露的方法的使得上层不需要关注数据库的相关信息,只需要插入、删除、更新、查询即可。

POJO(Plain Ordinary Java Object)简单Java对象

表示一个个简单的Java对象,而PO、VO、DTO都是典型的POJO,而DAO和BO一般不是POJO,只是提供了一些调用方法。

POJO是DO、DTO、BO、VO的统称。

实例

有一个博客系统,数据库中存储了很多篇博客。我们会做如下设计:

数据库表:表中的博客包括编号、博客标题、博客内容、博客标签、博客分类、博客状态、创建时间、修改时间等。

  • PO:包括编号、博客标题、博客内容、博客标签、博客分类、博客状态、创建时间、修改时间等。(与数据库表中的字段一样。)
  • VO:在客户端浏览器展示的页面数据,博客标题、博客内容、博客标签、博客分类、创建时间、上一篇博客URL、下一篇博客URL。
  • DTO:在服务端数据传输的对象,编号、博客标题、博客内容、博客标签、博客分类、创建时间、上一篇博客编号、下一篇博客编号。
  • DAO:数据库增删改查的方法,例如新增博客、删除博客、查询所有博客、更新博客。
  • BO:基本业务操作,如管理分类、管理标签、修改博客状态等,是我们常说的service层操作。

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

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

相关文章

海外应用ASO优化的小技巧3

编写准确的应用程序描述,有4000个字符限制。用户可以访问应用程序的主要功能和信息,要说服并推动用户去下载我们的应用,需要使用自然流利的语言。 1、填写应用描述的方案。 我们需要知道该应用有什么用,能够解决什么问题&#xf…

latex 笔记:cs论文需要的排版格式

主要针对英文文献 1 基本环境 连字符 不同长度的"-"表示不同含义。 一个"-"长度的连字符用于词中两个"-"长度的连字符常用于制定范围三个"-"长度的连字符是破折号数学中的负数要用数学环境下的-得到 强调 在正式文章中, 通常不…

C++提高编程——模板

C提高编程 本阶段主要针对C泛型编程和STT技术做详细讲解,探讨C更深层的使用 1模板 1.1模板的概念 模板就是建立通用的模具,大大提高复用性 例如生活中的模板 寸照片模板: 1.2函数模板 C另一种编程思想称为 泛型编程,主要利…

Linux权限相关问题

权限 1. 权限概念su 2.权限管理2.1 权限设置方法2.1.1 chmod(change mode)chownchgrpumask 3.目录的权限粘滞位 权限总结 1. 权限概念 Linux下有两种用户:超级用户(ROOT),普通用户。 超级用户:可以Linux下的系统做任…

软件测试学术顶会——ISSTA 2023 论文(网络安全方向)清单、摘要与总结

总结 本次会议涵盖的安全研究主题广泛,包括源代码分析、二进制代码分析、恶意软件检测、漏洞检测、模糊测试、程序验证等。一些热门的研究方向包括:基于机器学习的漏洞检测、大型语言模型在软件安全中的应用、区块链智能合约安全分析。这些方向都在最近几年持续发展。一些较冷门…

c++ std::shared_ptr(内存布局)

https://cplusplus.com/reference/memory/shared_ptr/

基于Redis实现点赞及排行榜功能

微信公众号访问地址:基于Redis实现点赞及排行榜功能 推荐文章: 1、SpringBoot整合多数据源,并支持动态新增与切换(详细教程) 2、​​​​​​Redis中使用lua脚本 3、SpringBoot统一标准响应格式及异常处理 4、Spr…

牛客小白月赛75D题题解

文章目录 [ 矩阵](https://ac.nowcoder.com/acm/contest/60063/D)问题建模问题分析1.分析所求代码 矩阵 问题建模 给定一个n*m的字符矩阵,字符矩阵内包含两种字符’0’和’1’,从(1,1)出发,每次可以花费一单位时间向上下左右移动…

Gradle(一)Windows下安装

目录 一、简介二、下载和安装1.下载2.配置环境变量3.指定个人用户目录4.验证 三、IDEA 设置 Gradle 官网地址:https://gradle.org/官方文档: https://docs.gradle.org/current/userguide/userguide.html下载地址: https://gradle.org/release…

16.5.3 【Linux】SELinux 三种模式的启动、关闭与观察

并非所有的 Linux distributions 都支持 SELinux 的,所以你必须要先观察一下你的系统版本为何。 目前 SELinux 依据启动与否,共有三种模式,分别如下: enforcing:强制模式,代表 SELinux 运行中,…

Codeforces算法心得——A. Array Coloring

大家好,我是晴天学长,确实全世界最大的算法竞赛平台有很多独特且创新的地方,后面我会持续的更新的!加油!💪💪💪 1 )A. Array Coloring 2) .算法思路 数组中的奇数个数一…

机器学习深度学习——自注意力和位置编码(数学推导+代码实现)

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——注意力分数(详细数学推导代码实现) 📚订阅专栏:机器学习…

导读-Linux简介

Linux简介 ​ 总所周知,计算机系统包含硬件和软件两部分。硬件部分被称为裸机,主要包括中央处理器(CPU)、内存、外存和各种外部设备。软件部分主要包括系统软件和应用软件两部分。系统软件包括操作系统、汇编语言、编译程序、数据…

Leetcode Top 100 Liked Questions(序号53~74)

53. Maximum Subarray 题意:一个数组,找到和最大的子串 我的思路 我记得好像On的动态规划来做的?但是想不起来了,先死做,用的前缀和——TLE超时 那就只能想想dp怎么做了 假设dp[i]表示的是以 i 为右端点的最大的…

在医疗行业数字孪生能做些什么?

数字孪生技术随着发展正在多行业遍地开花,在之前的文章中也为大家介绍过数字孪生的行业应用,今天带大家一起探讨一下数字孪生在医疗行业的表现。其实数字孪生在医疗行业已有很多应用案例,从医疗诊断到手术模拟,再到药物研发&#…

android内存分析工具记录,请利用好最后2个神器

相机见证了java内存暴增和native持续增长的问题,因此这里记录一下使用的工具情况,方便后续继续使用 一、java 内存 如果是java层的内存可以直接借助leakCanary工具,配置也很简单,直接在build.gradle中添加依赖即可: …

Java语言怎么输出有颜色的字符串呢?

在Java中,我们应该如何输出有颜色的文字字符串呢? 目录 一、使用方法 二、举例说明 三、常见的颜色及其对应的ANSI转义序列 一、使用方法 在Java中,可以使用ANSI转义序列来改变输出文本的颜色。 二、举例说明 (1&#xff…

【mysql报错解决】MySql.Data.MySqlClient.MySqlException (0x80004005)或1366

场景:c#使用mysql数据库执行数据库迁移,使用了新增inserter的语句,然后报错 报错如下: 1.MySql.Data.MySqlClient.MySqlException (0x80004005): Incorrect string value: ‘\xE6\x9B\xB4\xE6\x94\xB9…’ for column ‘Migratio…

LVS 负载均衡集群

集群 集群(Cluster)是一组相互连接的计算机或服务器,它们通过网络一起工作以完成共同的任务或提供服务。集群的目标是通过将多台计算机协同工作,提高计算能力、可用性、性能和可伸缩性,适用于大量高并发的场景。 集群…

安科瑞变电所运维平台在电力系统中应用分析

摘要:现代居民生活、工作对电力资源的需求量相对较多,给我国的电力产业带来了良好的发展机遇与挑战。探索电力系统基本构成, 将变电运维安全管理以及相应的设备维护工作系统性开展,能够根据项目实践工作要求,将满足要求…