高级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;
}
总结
- 所有的对象: PO/VO/BO/DO/DTO/POJO, 持久化对象,值对象,业务对象,数据对象,数据传输对象,简单对象
- PO: 持久化对象,主要用于数据库交互,通常与数据库表结构对应
- VO:值对象主要和前端进行交互,接受前端的数据或返回前端数据
- BO:业务对象, 封装业务逻辑, 包含多个VO和DO的组合, 涵盖了业务规则的操作, 对象里会包含其他额外的校验判断逻辑
- DO: 数据对象, 强调的是从数据角度描述业务对象, 从数据库表或者是其他存储数据中得到的数据, 例如redis,文本文件.
- DTO: 数据传输对象, 分布式系统中服务接口间的数据传输, 后端不同层之间的数据传输
- POJO: 简单的java对象,没有继承的简单类.
相关文章:
高级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的属性对…...
MFC读取PC6408板卡输入信号实例
本程序基于前期我的博客文章《MFC用信号灯模拟工控机数字量输入信号实时采集实例(源码下载》 1、在TheradDlg.h中相关代码 ... private:unsigned short nAddr; ... TheradDlg.cpp中相关代码 #include "pc60002k.h"BOOL CTheradDlg::OnInitDialog() { ..…...
@Async的使用说明
在 Spring Boot 中,Async 注解用于实现异步方法调用,允许方法在单独的线程中执行,从而避免阻塞主线程,提升应用的并发处理能力。 1. 基本用法 在 Spring Boot 中使用 Async 很简单,主要步骤如下: 步骤 1…...
经验笔记:SQL调优
SQL调优经验笔记 引言 SQL调优是确保数据库系统高效运行的重要环节。通过对查询语句、数据库配置、硬件资源等方面进行优化,可以显著提升数据库性能,进而增强应用程序的整体表现。以下是基于常见调优手段和实践经验整理的一份经验笔记。 1. 查询语句优…...
Selenium使用浏览器用户配置进行测试
本文主要介绍了如何在使用Selenium WebDriver进行自动化测试时,创建和使用自定义的Firefox配置文件。 什么是Firefox配置文件? Firefox会将用户的个人信息,如书签、密码和用户偏好设置存储在一个称为配置文件的文件集合中,这些文…...
virsh命令的使用
virsh 是一个用于管理虚拟机的命令行工具,它与 libvirt 服务配合使用,支持对虚拟机的创建、配置、启动、停止等操作。 1、列出虚拟机 列出正在运行的虚拟机: virsh list列出所有虚拟机(包括未启动的): …...
【来学Vue吧】创建一个Vue项目
🌟 嗨,我是命运之光! 🌍 2024,每日百字,记录时光,感谢有你一路同行。 🚀 携手启航,探索未知,激发潜能,每一步都意义非凡。 首先需要配置Vue环境…...
C#迭代器方法和yield用法
一.迭代器方法介绍 可使用foreach循环进行遍历的方法,称为迭代器方法。 迭代器方法使用yield return语句返回元素。 到达yield return语句时,会记住当前在代码中的位置。 下次调用迭代器函数时,将从该位置开始执行。换言之,如果…...
斗破C++编程入门系列之二十六:数组、指针和字符串:动态内存分配和释放(一星斗师)
斗破C目录: 斗破C编程入门系列之前言(斗之气三段) 斗破C编程入门系列之二:Qt的使用介绍(斗之气三段) 斗破C编程入门系列之三:数据结构(斗之气三段) 斗破C编程入门系列之…...
Servlet 和 Spring Boot 的请求处理流程区别和例子
当然可以为您绘制一个流程图,展示 Servlet 和 Spring Boot 的请求处理流程。这将帮助我们更直观地比较两者的工作方式。 #mermaid-svg-PgFEmecUmDhvxxtQ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-P…...
C++笔记之map的实用操作
C++笔记之map的实用操作 文章目录 C++笔记之map的实用操作1.初始化1.1.使用列表初始化1.2.使用 `insert` 方法1.3.使用 `emplace` 方法1.4.复制构造1.5.移动构造2.赋值2.1.列表赋值2.2.插入元素2.3.批量插入3.取值3.1.使用 `[]` 操作符3.2.使用 `at()` 方法3.3.检查键是否存在3…...
Lombok失效:报错 找不到符号 Springboot项目
错误原因,Springboot项目为Lombok提供了版本管理的支持,所以引入Lombok依赖的时候,无需手动指定版本,手动指定了可能会导致依赖冲突。 去掉手动指定的版本,问题解决...
Linux 基础命令-文件与目录操作
在 Linux 操作系统中,文件和目录是组织和管理数据的核心单元。作为一个命令行驱动的操作系统,Linux 提供了一系列强大且灵活的命令来操作文件和目录。掌握这些命令不仅是管理 Linux 系统的基础,也是高效使用 Linux 环境的关键。 一、文件与目…...
Delphi 12.1安卓APP开发中获取硬件信息及手机号
Demo与代码已上传到CSDN下载。 这里简单说一下代码内容,完整代码请自行下载,不清楚的欢迎留言交流。 前言 演示Demo使用了我自己开发的一个控件,TLayoutPro 《Delphi D10.3 LayoutsPro 控件简介 -避免输入焦点被虚拟键盘遮挡》请查看并下载控…...
STM32 - 笔记4
1 STM32 示波器 基于STM32的简易示波器项目(含代码)——HAL库_stm32简易示波器 基于STM32的简易示波器项目(含代码)——HAL库_stm32简易示波器_stm32示波器-CSDN博客 【强烈推荐】基于stm32的OLED各种显示实现(含动态图)_stm32oled以十六进制显示-CSDN博客 STM32示波器…...
【H2O2|全栈】更多关于HTML(1)HTML进阶(一)
目录 HTML进阶知识 前言 准备工作 标签的扩展(一) 本文中的标签在什么位置使用? title标签 meta标签 name viewport referrer http-equiv charset content link标签 实际案例 可视部分 代码分析 其他标签 base标签 styl…...
新160个crackme - 053-devilz KeyGen me#3
运行分析 解压出来4个文件运行程序发现要破解Name和Serial PE分析 32位,petite壳 手动脱壳 使用windows XP虚拟机OD打开程序按2下F8,发现ESP变红,根据ESP定律,在该地址右键 -> HW break下断点 继续按2下F9,来到灰色…...
ORA-12514
第一步,去这个地址,查查你的服务名是否存在 第二步,没查到就是你服务名写错了,查到了就退出我的解答...
MyBatis-PlusDruid数据源
MyBatis-Plus简介 MyBatis-Plus(简称MP)是一个MyBatis的增强工具,它在MyBatis的基础上进行了增强而不改变其原有的功能,旨在简化开发、提高效率。以下是对MyBatis-Plus的详细简介: 一、基本概述 定义:MyBat…...
C#中chart绘制曲线
官网资料:Chart 类 (System.Windows.Forms.DataVisualization.Charting) | Microsoft Learn 类的 Chart 两个重要属性是 Series 和 ChartAreas 属性,这两个属性都是集合属性。 Series集合属性存储Series对象,这些对象用于存储要显示的数据以…...
树突状细胞相关细胞因子的功能及疾病关联
树突状细胞作为免疫系统中核心的抗原呈递细胞,其分泌的多种细胞因子(IL-1α、IL-1β、IL-6、TNFα、IL-10)在免疫反应的启动、调控及稳态维持中发挥着核心作用。这些细胞因子具有双重调控特性,既是机体抵御病原体入侵的重要屏障&a…...
SDR++软件无线电:3个关键步骤让你轻松探索无线电频谱世界
SDR软件无线电:3个关键步骤让你轻松探索无线电频谱世界 【免费下载链接】SDRPlusPlus Cross-Platform SDR Software 项目地址: https://gitcode.com/GitHub_Trending/sd/SDRPlusPlus 你是否曾经好奇过无线电波中隐藏着怎样的秘密?从FM广播到航空通…...
SX1255和AD9361的LO泄露实测对比:为什么你的无线模块EVM总是不达标?
SX1255与AD9361本振泄露实战分析:破解EVM不达标的三大关键策略 在调试LoRa模块或小型基站射频前端时,工程师们最常遇到的"幽灵问题"莫过于EVM指标莫名劣化。上周深夜,当我的频谱仪上再次出现那个熟悉的载波泄露尖峰时,我…...
Windows与Office激活终极指南:KMS_VL_ALL_AIO完整解决方案
Windows与Office激活终极指南:KMS_VL_ALL_AIO完整解决方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 在Windows和Office激活管理中,你是否经常遇到版本不匹配、激活…...
汽车零部件三维扫描检测:精密制造新标杆,全链路质量管控升级
当下,汽车产业正加速向轻量化、电动化、集成化转型,零部件作为整车质量的核心基石,其制造精度与检测标准持续攀升。主机厂对零部件的形位公差、曲面轮廓度、装配匹配度要求日趋严苛,尤其在新能源汽车领域,薄壁件、复杂…...
端口映射配置后连不上?别慌!按这4步排查,一学就会
一、什么是端口映射监控端口映射监控是指对端口映射规则的状态、流量及连通性进行全面监测,确保映射规则正常生效,及时发现并排查故障。它涵盖两个层面:本机端口监听状态检测和网络层端口映射连通性验证。二、本机端口监控(服务端…...
Claude Code 架构深度解析:一文搞懂 Sub-Agent、Skill 与底层模型之间的协同机制
Claude Code 架构深度解析:一文搞懂 Sub-Agent、Skill 与底层模型之间的协同机制 Claude Code 凭什么成为 AI 编程工具市场占有率第一?本文深入拆解其内部四层架构——Skill 拦截层、Claude Code 编排器、Sub-Agent 执行层、底层大模型推理层——带你彻底…...
BabelDOC终极指南:三步解决PDF翻译格式错乱难题
BabelDOC终极指南:三步解决PDF翻译格式错乱难题 【免费下载链接】BabelDOC Yet Another Document Translator 项目地址: https://gitcode.com/GitHub_Trending/ba/BabelDOC 还在为PDF文档翻译后格式混乱而烦恼吗?BabelDOC作为专业的PDF文档翻译工…...
3步完成AI化学逆合成规划:让复杂分子合成变得简单高效的终极指南
3步完成AI化学逆合成规划:让复杂分子合成变得简单高效的终极指南 【免费下载链接】aizynthfinder A tool for retrosynthetic planning 项目地址: https://gitcode.com/gh_mirrors/ai/aizynthfinder 你是否曾为设计复杂分子的合成路线而烦恼?传统…...
为内部ai工具配置taotoken实现安全可控的api调用代理
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为内部AI工具配置Taotoken实现安全可控的API调用代理 在企业内部开发AI工具或智能体(Agent)时,…...
