DTO,VO,PO,Entity

1. DTO (Data Transfer Object)

定义

DTO 是数据传输对象,用于在不同系统或层之间传输数据。

目的

简化数据传输,降低耦合,通常只包含需要传输的字段,避免暴露内部实现细节。

使用场景
  • ControllerService远程调用 之间的数据传递。

  • RESTful API 的请求和响应对象。

特点
  • 仅包含需要传递的数据字段,不包含业务逻辑。

  • 可避免传递不必要的字段,减少网络开销。

示例
public class UserDTO {private Long id;private String username;private String email;// Getter and Setter
}

2. VO (View Object)

定义

VO 是视图对象,用于表示前端页面展示的数据

目的

在返回数据给前端时,封装响应所需的字段或结构,常用于 API 返回结果。

使用场景
  • 服务端返回给前端的对象。

  • 数据经常需要从多个来源整合后封装到一个 VO 中。

特点
  • 包含和前端展示相关的字段。

  • 和前端高度耦合,可能包括转换后的数据(如日期格式化)。

示例
public class UserVO {private String username;private String nickname;private String gender;// Getter and Setter
}

3. PO (Persistent Object)

定义

PO 是持久化对象,表示数据库中的一条记录,与数据库表字段一一对应。

目的
  • 表现数据库的实体结构。

  • 通常映射到数据库中的一张表,直接用作 CRUD 操作的载体。

使用场景
  • 数据库层,配合 MyBatis、Hibernate 等 ORM 框架。

特点
  • 和数据库表强绑定,字段通常和表字段一一对应。

  • 主要用于 DAO 层操作。

示例
public class UserPO {private Long id;private String username;private String password;private String email;private Timestamp createTime;private Timestamp updateTime;// Getter and Setter
}

4. Entity (实体类)

定义

Entity 是 JPA 或 Hibernate 框架中使用的类,通常映射到数据库表。

目的

用作 ORM 的核心对象,直接通过实体类操作数据库。

使用场景
  • JPA 的 @Entity 注解标记的类。

  • 与 Service 和 DAO 交互。

特点
  • 包含持久化相关的注解(如 @Entity@Table)。

  • 和 PO 类似,但多用于 ORM 框架。

  • 可能包含数据库操作相关的方法或注解配置。

示例
@Entity
@Table(name = "user")
public class UserEntity {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;
​@Column(nullable = false, unique = true)private String username;
​private String password;
​@Column(nullable = false)private String email;
​@CreationTimestampprivate Timestamp createTime;
​@UpdateTimestampprivate Timestamp updateTime;
​// Getter and Setter
}

总结对比

对象类型主要作用特点使用场景
DTO数据传输对象只包含传输字段,去除业务逻辑,减小耦合控制层与服务层、外部接口
VO视图对象用于返回给前端的数据,可能需要整合或格式化前端页面展示
PO持久化对象数据库表的表现,与数据库字段一一对应DAO 层,数据库 CRUD 操作
EntityORM 框架中的实体类通常是持久化对象的实现,包含 JPA 或 Hibernate 注解ORM 框架操作,如 Hibernate、JPA

关系与使用建议

  1. Entity 与 PO 的关系

    • 在 ORM 框架中,Entity 实际上是 PO 的实现,只不过额外加入了 JPA 注解支持。

    • 如果不使用 ORM,可以直接使用 PO 表达数据库模型。

  2. DTO 与 VO 的关系

    • DTO 和 VO 的字段可能有一定重叠,但目的不同。

    • DTO 更关注传输效率,VO 更关注展示效果。

  3. 分层使用建议

    • Controller 层:接受 DTO,返回 VO。

    • Service 层:接收和返回 DTO。

    • DAO 层:操作 PO 或 Entity。

通过明确分工,可以提升代码的可维护性和灵活性。

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

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

相关文章

从零搭建高可用分布式限流组件:设计模式与Redis令牌桶实践

一、需求背景与设计目标 在分布式系统中,面对突发流量时需要一种精准可控的流量控制手段。我们的组件需要具备: 多维度限流(用户/IP/服务节点/自定义表达式)分布式环境下精准控制开箱即用的Spring Boot Starter集成高扩展性的架…

Node.js 事件循环和线程池任务完整指南​

在 Node.js 的运行体系中,事件循环和线程池是保障其高效异步处理能力的核心组件。事件循环负责调度各类异步任务的执行顺序,而线程池则承担着处理 CPU 密集型及部分特定 I/O 任务的工作。接下来,我们将结合图示,详细剖析两者的工作…

echarts自定义图表--仪表盘

基于仪表盘类型的自定义表盘 上图为3层结构组成 正常一个仪表盘配置要在外圈和内圈之间制造一条缝隙间隔 再创建一个仪表盘配置 背景透明 进度条拉满 进度条颜色和数据的背景相同开始处的线 又一个仪表盘配置 数值固定一个比较小的值 <!DOCTYPE html> <html><h…

【数据结构】图论存储结构深度解析:邻接多重表如何实现无向图O(1)删边?邻接矩阵/链表/十字链对比

邻接多重表 导读一、有向图的存储结构二、邻接多重表三、存储结构四、算法评价4.1 时间复杂度4.2 空间复杂度 五、四种存储方式的总结5.1 空间复杂度5.2 找相邻边5.3 删除边或结点5.4 适用于5.5 表示方式 六、图的基本操作结语 导读 大家好&#xff0c;很高兴又和大家见面啦&a…

【Rust】所有权

目录 所有权基本概念所有权介绍栈与堆变量作用域 字符串字符串字面值&#xff08;&str&#xff09;String 类型相互转换所有权 内存结构对比注意事项和常见坑使用场景 内存与分配变量与数据交互的方式&#xff08;一&#xff09;&#xff1a;移动变量与数据交互的方式&…

4月29日日记

终于是考完解析几何了&#xff0c;今天昨天突击了一下&#xff0c;感觉确实学会了很多之前不会的东西&#xff0c;但是可能距离高分还差很多。这次考试不太理想。大部分原因是前期没学&#xff0c;吸取教训&#xff0c;早点开始复习微积分。明天还有一节微积分&#xff0c;但是…

【深度对比】Google Play与IOS 马甲包处理差异分析

在移动应用发布与推广过程中&#xff0c;马甲包&#xff08;Cloned App / Alternate Version&#xff09; 曾被广泛用于流量测试、风险隔离、多品牌运营等场景中。随着 Google Play 与 Apple App Store 审核政策不断收紧&#xff0c;开发者们越来越关注两个平台对“马甲包”的态…

MCP 架构全解析:Host、Client 与 Server 的协同机制

目录 &#x1f3d7;️ MCP 架构全解析&#xff1a;Host、Client 与 Server 的协同机制 &#x1f4cc; 引言 &#x1f9e9; 核心架构组件 1. Host&#xff08;主机&#xff09; 2. Client&#xff08;客户端&#xff09; 3. Server&#xff08;服务器&#xff09; &#…

记录一次无界微前端的简单使用

记录一次无界微前端使用 无界微前端主应用子应用nginx配置 无界微前端 https://wujie-micro.github.io/doc/ 因为使用的是vue项目主应用和次应用都是 所以用的封装的。 https://wujie-micro.github.io/doc/pack/ 主应用 安装 选择对应的版本 # vue2 框架 npm i wujie-vue2…

LLM应用于自动驾驶方向相关论文整理(大模型在自动驾驶方向的相关研究)

1、《HILM-D: Towards High-Resolution Understanding in Multimodal Large Language Models for Autonomous Driving》 2023年9月发表的大模型做自动驾驶的论文&#xff0c;来自香港科技大学和人华为诺亚实验室&#xff08;代码开源&#xff09;。 论文简介&#xff1a; 本文…

FTP-网络文件服务器

部署思路 单纯上传下载ftp系统集成间的共享 samba网络存储服务器 NFS 网络文件服务器&#xff1a;通过网络共享文件或文件夹&#xff0c;实现数据共享 NAS &#xff08; network append storage):共享的是文件夹 FTP&#xff1a;文件服务器samba&#xff1a;不同系统间的文件…

在 Ubuntu 22.04 x64 系统安装/卸载 1Panel 面板

一、 1Panel 是什么&#xff1f; 1Panel 是一款基于 Go 语言开发的现代化开源服务器管理面板&#xff08;类似宝塔面板&#xff09;&#xff0c;专注于容器化&#xff08;Docker&#xff09;和云原生环境管理&#xff0c;提供可视化界面简化服务器运维操作。 1. 1Panel主要功…

Redis | Redis集群模式技术原理介绍

关注&#xff1a;CodingTechWork Redis 集群模式概述 Redis 集群&#xff08;Cluster&#xff09;模式是 Redis 官方提供的分布式解决方案&#xff0c;旨在解决单机 Redis 在数据量和性能上的限制。它通过数据分片、高可用性和自动故障转移等特性&#xff0c;提供了水平扩展和…

Servlet小结

视频链接&#xff1a;黑马servlet视频全套视频教程&#xff0c;快速入门servlet原理servlet实战 什么是Servlet&#xff1f; 菜鸟教程&#xff1a;Java Servlet servlet&#xff1a; server applet Servlet是一个运行在Web服务器&#xff08;如Tomcat、Jetty&#xff09;或应用…

数据库进阶之MySQL 程序

1.目标 1> 了解mysqlId服务端程序 2> 掌握mysql客户端程序的使用 3> 了解工具包中的其他程序 2. MySQL程序简介 本章介绍 MySQL 命令⾏程序以及在运⾏这些程序时指定选项的⼀般语法(如:mysql -uroot -p)。 对常⽤程序进⾏详细的讲解(实用工具的使用方法)&#xf…

VS2022 设置 Qt Project Settings方法

本文解决的问题&#xff1a;创建完成后&#xff0c;如需要用到Sql或者Socket等技术&#xff0c;需要设置Qt Project Settings&#xff1b; 1、打开VS2022编译器&#xff0c;创建QT项目工程 2、创建完成后&#xff0c;点击 解决方案 →右键属性 3、选择 Qt Project Settings →…

React:封装一个评论回复组件

分析 用户想要一个能够显示评论列表&#xff0c;并且允许用户进行回复的组件。可能还需要支持多级回复&#xff0c;也就是对回复进行再回复。然后&#xff0c;我要考虑组件的结构和功能。 首先&#xff0c;数据结构方面&#xff0c;评论应该包含id、内容、作者、时间&#xf…

wx读书某sign算法详解

未加固 版本&#xff1a;9.2.3 前置知识&#xff1a; (v41 & 0xFFFFFFFFFFFFFFFELL) 是一种高效的奇偶检查方法&#xff0c;用于判断数值 v41 是否为奇数。 std::sort<std::lessstd::string,std::string &,std::string>(a1, v6, s); 排序算法 # 完全等价的字…

Django的异步任务队列管理_Celery

1 基本原理 Celery 是一个异步任务队列&#xff0c;能够将耗时操作&#xff08;如发邮件、处理图片、网络爬虫等&#xff09;从 Django 主线程中分离出来&#xff0c;由后台的 worker 处理&#xff0c;避免阻塞请求。Celery 作为独立运行的后台进程&#xff08;Worker&#xf…

【计算机网络】Linux网络的几个常用命令

&#x1f4da; 博主的专栏 &#x1f427; Linux | &#x1f5a5;️ C | &#x1f4ca; 数据结构 | &#x1f4a1;C 算法 | &#x1f152; C 语言 | &#x1f310; 计算机网络 相关文章&#xff1a;计算机网络专栏 目录 ping&#xff08;检测网络连通性&#xff09;…