高级java每日一道面试题-2024年9月06日-基础篇-Java中的PO、VO、BO、DO、DAO、DTO、POJO是什么意思?

如果有遗漏,评论区告诉我进行补充

面试官: Java中的PO、VO、BO、DO、DAO、DTO、POJO是什么意思?

我回答:

PO持久化对象(Persistent Object)

PO是持久化对象,用于表示数据库中的实体或表的映射
通常与数据库表的结构和字段对应
PO的属性对应数据库表的字段,可以进行持久化操作(新增、查询、更新、删除)
例如:UserPO 中的属性和数据库表中的字段是一一对应的。

// 通常与数据库表对应
public class UserPO {private Long id;private String username;private String password;
}

VO值对象(Value Object)

VO是值对象,用于封装数据
通常是不可变的,用于传递数据而不包含业务逻辑
VO可以用于在不同层之间传递数据,如前端和后端之间,后端的返回的到前端的数据只需要保留必要的字段就可以,将这些必要的字段封装起来就是VO
例如:

// 用于展示,例如给前端的用户视图
public class UserVO {private String username;private String display_name;
}

BO业务对象(Business Object)

BO是业务对象,用于封装业务逻辑和操作
包含与业务相关的方法和属性,用于实现业务规则和操作
BO通常与领域模型紧密相关,用于表示业务概念和业务流程
例如:UserBO在包含了属性id和username的基础上还包含了对username的验证逻辑

// 包含业务逻辑
public class UserBO {private Long id;private String username;public boolean isValid() {return username != null && !username.isEmpty();}
}

DO数据对象(Data/Domain Object)

DO通常与BO和PO相对应,用于实现领域模型和业务逻辑,用于表示从数据存储中得到的数据
例如:

// 这里的DO和PO非常相似
public class UserDO {private Long id;private String username;private String password;
}

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

DAO是数据访问对象,用于封装对数据库的访问操作,也就是我们常说的Dao层
提供对数据库的增删改查等操作的接口
DAO可以隐藏底层数据库的具体实现细节,使得业务逻辑层与数据库解耦
例如:UserDao提供了对数据库表user的增删改查操作,这里的UserPO就是我们上面说的用来一一对应接收表中的字段

public interface UserDao {UserPO getById(Long id);void save(UserPO user);void delete(UserPO user);List<UserPO> findAll();
}

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

DTO是数据传输对象,用于在不同层之间传输数据
通常用于优化数据传输的性能和减少网络通信的开销。
DTO可以封装多个对象的数据,以减少网络请求次数
如果说VO一般用于前端和后端之后传输数据,那么DTO就是在后端的不同层之间传递数据,例如controller层和service层或者在服务之间结构调用的时候使用DTO
例如:

// 用于API或远程服务间的数据传输
public class UserDTO {private String username;private String email;
}

POJO普通Java对象(Plain Old Java Object)

POJO是一个简单的Java对象,没有特定的限制和约束
是一种普通的Java类,不依赖于特定的框架或接口
例如:User类是一个普通的java实体类

// 简单的Java对象,不继承或实现任何特殊的类或接口
public class User {private Long id;private String name;
}

总结

  1. 所有的对象: PO/VO/BO/DO/DTO/POJO, 持久化对象,值对象,业务对象,数据对象,数据传输对象,简单对象
  2. PO: 持久化对象,主要用于数据库交互,通常与数据库表结构对应
  3. VO:值对象主要和前端进行交互,接受前端的数据或返回前端数据
  4. BO:业务对象, 封装业务逻辑, 包含多个VO和DO的组合, 涵盖了业务规则的操作, 对象里会包含其他额外的校验判断逻辑
  5. DO: 数据对象, 强调的是从数据角度描述业务对象, 从数据库表或者是其他存储数据中得到的数据, 例如redis,文本文件.
  6. DTO: 数据传输对象, 分布式系统中服务接口间的数据传输, 后端不同层之间的数据传输
  7. POJO: 简单的java对象,没有继承的简单类.

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一篇文章了解Pytest单元测试框架

文章目录 1.Pytest是什么2.Pytest的安装3.Pytest快速入门4.Pytest文件规范5.常用的断言类型 1.Pytest是什么 pytest 是一个功能强大且灵活的 Python 测试框架,主要优点包括简洁易用、自动测试发现、丰富的插件生态系统、参数化测试、详细的断言错误信息、以及强大的 fixtures …

CentOS7虚拟机下安装及使用Docker

文章目录 一&#xff0c;准备工作二、安装Docker三、启动Docker四、验证Docker五、使用Docker六&#xff0c;卸载Docker 有一个Centos7的虚拟机&#xff0c;想要安装个docker测试一些docker用法和熟悉命令 一&#xff0c;准备工作 1&#xff0c;使用uname -r命令检查系统内核…

K8s中如何使用etcd进行集群信息的备份与恢复

这里写目录标题 ETCD是什么?1. **`etcd`(服务)**2. **`etcdctl`(客户端工具)**如何安装etcdctl(客户端工具)查看目前K8s自带etcd中的版本信息安装对应版本的etcdutl工具下载 `etcdutl` 3.5.7 版本配置环境变量创建备份文件验证一下备份的快照文件备份文件恢复的效果演示…

怎么抓住威士忌蓝海市场?

​前些天和朋友吃饭&#xff0c;聊起来威士忌。 朋友说&#xff0c;这个威士忌啊&#xff0c;最近几年增值特别快&#xff0c;甚至超过了黄金、名表、艺术品、红酒这些经典的投资品类。而且存放得越久&#xff0c;升值的幅度就越大。 再加上&#xff0c;中国的威士忌市场现在…

【无标题】乡村研学旅行系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;客服聊天管理&#xff0c;基础数据管理&#xff0c;论坛管理&#xff0c;景点管理&#xff0c;商品管理&#xff0c;研学管理 微信端账号功能包括&#xff1a;系统首页&#xf…

第十九次CCF计算机软件能力认证题目解析(详细题解+代码+个人解读+持续跟新)

第一题 线性分类器 考虑一个简单的二分类问题——将二维平面上的点分为 A A A 和 B B B 两类。 训练数据包含 n n n 个点&#xff0c;其中第 i i i 个点&#xff08; 1 ≤ i ≤ n 1 ≤i ≤ n 1≤i≤n&#xff09;可以表示为一个三元组 ( x i , y i , t y p e i ) (x_i,y…

操作系统 --- 线程(Threads)概念 多线程模型 线程控制与组织

零、学习路线 一、线程的引入&#xff0c;什么是线程&#xff0c;为什么要引入线程&#xff1f; 如果说&#xff0c;在OS中引入进程的目的是为了使多个程序能并发执行&#xff0c;以提高资源利用率和系统吞吐量&#xff0c;那么&#xff0c;在操作系统中再引入线程&#xff0c…

Tableau 2024.3 快来了,你期待哪些新功能?

时隔不久&#xff0c;Tableau 再次发力&#xff0c;即将推出 2024.3 新版本&#xff01; 今年 7 月&#xff0c;Tableau 2024.2 的发布为数据分析领域带来了诸多创新。 时隔不久&#xff0c;Tableau 再次发力&#xff0c;即将推出 2024.3 新版本&#xff01;届时&#xff0c;将…

掌握动态文档生成的艺术:探索Python的docxtpl库

文章目录 掌握动态文档生成的艺术&#xff1a;探索Python的docxtpl库1. 背景介绍2. 库简介3. 安装指南4. 基础函数介绍5. 实际应用场景6. 常见问题及解决方案7. 总结 掌握动态文档生成的艺术&#xff1a;探索Python的docxtpl库 1. 背景介绍 在数据处理和自动化办公领域&#x…

今天讲点简单的:进制1

啊&#xff0c;哈喽&#xff0c;小伙伴们&#xff0c;大家好。我是#Y清墨&#xff0c;今天呐&#xff0c;我要介绍的是二进制。 导语 好久不见&#xff0c;今天来玩些简单的——二进制。 一.初步认识 十进制是逢十进一&#xff0c;那么&#xff0c;顾名思义&#xff0c;二进制…

QXlsx编译静态库-配置为Qt模块

Qt读写Excel–QXlsx编译为静态库-配置为Qt模块&#x1f346; 文章目录 Qt读写Excel--QXlsx编译为静态库-配置为Qt模块&#x1f346;[toc]1、概述&#x1f954;2、准备工作&#x1f955;3、配置环境&#x1f33d;4、加载QXlsx静态库&#x1f952; &#x1f449;QXlsx使用&#x…

Golang | Leetcode Golang题解之第389题找不同

题目&#xff1a; 题解&#xff1a; func findTheDifference(s, t string) (diff byte) {for i : range s {diff ^ s[i] ^ t[i]}return diff ^ t[len(t)-1] }

编曲术语:各种段落的英文表示 Cubasis和Cubase联合编曲

在编曲中&#xff0c;常见的段落英文表示如下&#xff1a; 前奏&#xff08;Intro&#xff09;&#xff1a;通常是歌曲开头的部分&#xff0c;用于引入主题&#xff0c;营造氛围。 主歌&#xff08;Verse&#xff09;&#xff1a;歌曲的主要叙述部分&#xff0c;一般有多段&am…

国庆假期出行必备!西圣PB充电宝!外出旅游出行好搭档!

随着国庆假期的脚步日益临近&#xff0c;大家的心早已飞向了那片期待已久的远方。无论是计划着与家人共赴山水之间&#xff0c;还是与好友相约城市探索&#xff0c;一场说走就走的旅行总是让人心潮澎湃。然而&#xff0c;在享受旅途的欢乐与自由时&#xff0c;手机电量不足的问…

力扣题解2552

大家好&#xff0c;欢迎来到无限大的频道。 今天和大家分享的是2552的题解思路。 题目描述&#xff1a; 统计上升四元组 一个长度为 n 下标从 0 开始的整数数组 nums &#xff0c;它包含 1 到 n 的所有数字&#xff0c;请你返回上升四元组的数目。 如果一个四元组 (i, j, …

JavaScript高级进阶(二)

JS弹窗 弹窗与语法 警告窗 window.alert()//用于确保用户可以得到某些信息 确认窗 window.confirm()//用于验证是否接受用户操作 提示窗 window.prompt()//用于提示用户在进入页面前输入某个值 <script> //警告窗 alert(欢迎光临); //提示框 var str prompt(是不是…

线程(Thread)

目录 线程&#xff08;Thread&#xff09; 线程的创建方式 实现方式 Runnable和Callable的区别 线程的命名和优先级 线程的六种状态 线程的插队 线程的中断 线程的让出 守护线程 设置线程为守护线程 sleep()和wait()的区别 线程的同步synchronized锁 语法格式 实现…

使用kubeadm部署k8s集群

1、简介 K8s部署主要有两种方式&#xff1a; 1、Kubeadm Kubeadm是一个K8s部署工具&#xff0c;提供kubeadm init和kubeadm join&#xff0c;用于快速部署Kubernetes集群。 2、二进制 从github下载发行版的二进制包&#xff0c;手动部署每个组件&#xff0c;组成Kubernetes集…

828华为云征文|华为云Flexus云服务器X实例之openEuler系统下部署WordPress网站

828华为云征文&#xff5c;华为云Flexus云服务器X实例之openEuler系统下部署wordpress网站 前言一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 Flexus云服务器X实例特点1.3 Flexus云服务器X实例使用场景 二、WordPress介绍2.1 WordPress简介2.2 WordPress主要特点…

有什么免费好用的ai写作软件?2024帮助你快速进行写作的软件

有什么免费好用的ai写作软件&#xff1f;2024帮助你快速进行写作的软件 AI写作软件如今在提升写作效率、生成灵感、以及帮助完成复杂的写作任务方面表现得越来越出色。以下是五款免费且好用的AI写作软件&#xff0c;它们能够帮助你快速进行写作&#xff0c;无论是博客文章、市…