日总结 23

news/2025/11/6 19:40:31/文章来源:https://www.cnblogs.com/lzq233/p/19197581

在软件开发中,DTO(Data Transfer Object,数据传输对象)和 Entity(实体)是两个不同场景下的核心概念,主要区别体现在用途、设计目的、属性特征等方面,具体如下:

  1. 定义与核心用途
    Entity(实体)本质是与数据库表结构映射的持久化对象,用于表示业务领域中的核心实体(如用户、订单、商品等),是数据在持久层(如数据库)中的 “镜像”。核心用途:直接与数据库交互(通过 ORM 框架如 MyBatis、JPA 等),承载数据库的字段信息,是业务逻辑层操作数据的基础。
    DTO(数据传输对象)本质是用于跨层 / 跨服务传输数据的 “容器”,专门用于在不同层(如 Controller 与 Service、Service 与客户端)或不同服务(如微服务间)传递数据。核心用途:优化数据传输,仅包含传输所需的字段,避免不必要的信息暴露或冗余传输。
  2. 设计目的差异
    Entity 的设计目的:完全贴合数据库表结构,需要包含表中的所有字段(如主键、外键、冗余字段、创建时间、版本号等),以确保能完整映射和操作数据库数据。例如:用户表user有id(主键)、username、password(加密存储)、email、create_time、version(乐观锁),对应的 Entity 会包含所有这些字段。
    DTO 的设计目的:按需设计,仅包含 “传输场景中需要的字段”,目的是减少数据传输量、隐藏敏感信息、适配接口需求。例如:前端展示用户信息时,不需要password(敏感)、version(内部字段),此时 DTO 可能只包含id、username、email。
  3. 属性与行为差异
    Entity:
    属性:与数据库字段一一对应,可能包含 ORM 注解(如@Id、@Column)、关联关系(如@OneToMany)等。
    行为:可能包含简单的业务逻辑方法(如isVip()判断用户是否为会员),或与持久化相关的逻辑(如自动更新update_time)。
    状态:在 ORM 框架中,Entity 可能是 “持久态”(与数据库会话关联,修改后会自动同步到数据库)。
    DTO:
    属性:仅包含传输所需字段,字段名可能与 Entity 不同(如前端需要userName,而 Entity 是username),无 ORM 注解。
    行为:通常是 “纯数据载体”,仅包含 get/set 方法,不包含业务逻辑(否则会违背 “传输对象” 的设计初衷)。
    状态:无状态(Stateless),仅在传输过程中临时存在,不与数据库会话关联。
  4. 安全性与灵活性
    Entity:包含数据库全量字段(可能有密码、权限等敏感信息),若直接用于传输(如返回给前端),会导致敏感信息泄露,且无法灵活适配不同接口的需求(如不同接口需要不同字段)。
    DTO:可根据场景灵活裁剪字段,过滤敏感信息(如去掉密码、身份证号),同时支持字段重命名、组合多个 Entity 的信息(如订单 DTO 包含用户姓名 + 商品名称),更适配接口交互。
    总结:核心区别表格
    维度 Entity(实体) DTO(数据传输对象)
    核心用途 映射数据库表,操作持久化数据 跨层 / 跨服务传输数据
    字段设计 与数据库表完全一致 仅包含传输所需字段
    业务逻辑 可能包含简单业务逻辑 无业务逻辑,仅 get/set
    状态 可能为持久态(与数据库关联) 无状态,仅临时存在
    安全性 包含敏感字段,不适合直接传输 过滤敏感字段,适合传输
    典型使用场景
    当需要从数据库查询数据并返回给前端时:
    用 Entity 从数据库查询完整数据;
    将 Entity 转换为 DTO(只保留前端需要的字段);
    前端接收 DTO 数据,避免敏感信息泄露和冗余传输。
    当接收前端提交的数据并保存到数据库时:
    前端传递 DTO(包含用户输入的字段);
    将 DTO 转换为 Entity(补充数据库所需的其他字段,如create_time);
    用 Entity 执行数据库插入操作。

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

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

相关文章

详细介绍:基于Echarts+HTML5可视化数据大屏展示-车辆综合管控平台

详细介绍:基于Echarts+HTML5可视化数据大屏展示-车辆综合管控平台pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

基于ollama和streamlit的聊天机器人

基于ollama和streamlit的聊天机器人 利用deepseek蒸馏模型 model=deepseek-r1:1.5b这个可以在client.chat里头自己定义会自动下载import streamlit as st import ollama client=ollama.Client(host=http://localhost:1…

CSP-S 2025 T2 [道路建设]

前言 赛时只拿到了$ kruskal$板子的 \(A\)性质的 \(32pts\),真正唐完,,,, 切入 首先我们可以一眼顶针看出这是一道最小生成树的题,然后发现\(K\leq10\),可以想到直接暴力枚举\(2^k\)次的不同排列,然后跑一遍\(…

使用Git钩子+ husky + lint语法检查提高前端项目代码质量

@目录配置 Git Hook原理介绍安装 Husky启用 Husky添加 Git Hook测试脚本执行效果添加语法检查安装Prettier配置Prettier格式化规则调优添加 Git Hook添加Git提交规范检查安装commitlint配置commitlint添加 Git Hook 作…

[题解]P10277 [USACO24OPEN] Bessies Interview S

P10277 [USACO24OPEN] Bessies Interview S 第一问可以用优先队列模拟,存储每个人的结束时间即可。 第二问,一开始考虑的是对于某一时刻队列中结束时间最小的人是可以任意互换顺序的,所以就用并查集把这些人合在一起…

关于 Java快速查找详细

package V_Recursion;public class C_QuickSort {public static void main(String[] args) {int[] arr = {6, 1, 2, 7, 9, 3, 4, 5, 10, 8};quicSort(arr, 0, arr.length - 1);for (int i = 0; i < arr.length; i++…

什么是Ansible 清单 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

完整教程:如何用开源软件

完整教程:如何用开源软件pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &…

第一次团队项目作业

软件工程团队项目第一次作业 - VALORANT 智能战术助手(第一部分) 作业信息这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering/这个作业要求在哪里 https://edu.cnblogs.com/campu…

隨機變量本質之最終闡述

懷特博士: 我的理智所剩無幾,必須儘快警告您——切勿觸碰概率的本質!那个不可名狀的存在堂而皇之地通過霍爾教授的死宣誓著自己的主宰。Kl-mghrov——我無法準確發音,這個名字本身就讓燈光閃爍、指針顫動。我是如此…

足式机器人适应多地形的方案

基于视觉的感知运动 两阶段方法:流程:首先在完全可观测的马尔可夫决策过程(MDP) 中,利用特权信息训练一个强大的教师策略。然后,通过知识蒸馏,将教师策略的知识迁移给一个仅能使用真实传感器数据的学生策略。优…

使用vLLM实测3090和4090的大模型推理性能

使用`vLLM`测试下大模型并发推理场景下3090和4090两张显卡的性能表现,看下4090是否在高并发场景下具备更高的扩展性。 3090显卡和4090显卡在模型推理过程中的显存和GPU使用率都比较接近,1~8并发度场景下,3090和409…

CF1700F Puzzle

考虑如果是 \(1 \times n\) 怎么做。 显然是前缀和的差的绝对值的和,因为每次移动改变一位前缀和。 考虑上下交换的本质是什么,就是给第一行减 \(1\),第二行加 \(1\),反过来同理,那么在前缀和异号时显然交换是不劣…

Redis高可用与高并发探险之旅:从单机到集群的完美进化【第三部分】

可以结合之前的文章融合起来一起理解学习:分布式缓存-Redis集群在一个名为"数据大陆"的世界里,Redis王国正面临着前所未有的挑战。随着用户流量的激增,单机Redis服务器已经不堪重负。今天,就让我们跟随年…

UE:论运行时动画录制的关键-正确获取骨骼数据与保存

© mengzhishanghun 原创文章 首发于 博客园 禁止未经授权转载核心问题 在 UE5.4 中实现运行时动画录制,最关键的两个问题是:如何获取正确的骨骼数据 - 避免崩溃和数据不匹配如何正确保存 AnimSequence - 使用…

a-menu 当设置折叠状态如何穿透悬浮菜单样式

效果antReset.css .ant-menu-submenu .ant-menu-submenu-popup .ant-menu .ant-menu-light {border: 1px solid #173808 !important; }/* 直接针对 popup 整体背景 */ .ant-menu-submenu-popup {background-color: #17…

attention论文及Transformer工作原理概述

attention论文及Transformer工作原理概述Posted on 2025-11-06 19:09 wsg_blog 阅读(0) 评论(0) 收藏 举报attention论文及Transformer工作原理概述

kamailio+rtpengine对sdp的处理

概述 使用kamailio+rtpengine的过程中,默认会使用rtpengine处理sdp信息,同时又需要对sdp信息定制,就需要对cfg配置流程中做特殊处理才能实现。 环境 CentOS 7.9 kamailio:5.8.3-bullseye docker rtpengine:mr13.1.1…