当前位置: 首页 > news >正文

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。

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

相关文章:

  • shell(4)
  • Linux环境变量的作用以及进程的虚拟地址原理
  • 关于php-fpm的调优和配置
  • [官方 IP] XPM_CDC
  • Origin绘图——多标签散点图优化(蜂群图)
  • C#里创建一个TCP客户端连接类
  • FastGPT部署的一些问题整理
  • 第一个机器人程序
  • 大厂Java面试深度解析:Dubbo服务治理、WebSocket实时通信、RESTEasy自定义注解与C3P0连接池配置实践
  • 【AI面试准备】语言模型、语音、多模态等模型能力评估指标和能力边界
  • 制作一款打飞机游戏31:敌人数据库
  • MIT6.S081 - Lab11 networking(网络栈)
  • MyBatis 使用 POJO 参数动态查询教程
  • 从零搭建体育比分网站:技术选型与API调用实战(附完整源码)
  • 解锁植被参数反演密码:AI 与 Python 的融合之道
  • Andorid车机UI适配,AndroidUI图px的单位,如何适配1920x720,PPI100的屏幕设备
  • X11VNC远程屏幕连接了解一下
  • 免费Grok API Key获取,Grok API使用指南
  • [特殊字符]OCR,给交通领域开了“外挂”?
  • 【保姆级教程-Centos7环境下部署Prometheus并设置开机自启】
  • 华夏幸福:去年营业收入237.65亿元,同比减亏12亿元
  • 李铁案二审今日宣判,押送警车已进入法院
  • 《中国奇谭》首部动画电影《浪浪山小妖怪》定档8月2日
  • 一场与纪录并行的伦敦马拉松,超40项新世界纪录诞生
  • 杭州6宗涉宅用地收金125.76亿元,萧山区地块楼面价冲破5万元/平米
  • 日本大米价格连续16周上涨,再创最高纪录