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

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.xdnf.cn/news/3043.html

相关文章:

  • 第一个机器人程序
  • C语言教程(二十):C 语言 typedef 关键字详解
  • AVL树左旋右旋的实现
  • C语言加餐--浮点数比较
  • 文件基础-----C语言经典题目(10)
  • 前端Vue3 + 后端Spring Boot,前端取消请求后端处理逻辑分析
  • 第35周Zookkeeper+Dubbo Zookkeeper
  • Transformer数学推导——Q32 可学习位置编码的梯度更新公式推导
  • Arkts完成数据请求http以及使用axios第三方库
  • 杭州数据库恢复公司之Dell服务器RAID5阵列两块硬盘损坏报警离线
  • 服务器远程超出最大连接数的解决方案是什么?
  • 如何创建并使用极狐GitLab 项目访问令牌?
  • 基于esp32的小区智能门禁集成系统设计和实现
  • BFS最短路
  • Vue + ECharts 实现多层极坐标环形图
  • 基于STM32、HAL库的ATECC508A安全验证及加密芯片驱动程序设计
  • java练习2
  • langchain 简单与ollama 关联使用
  • Thinkphp开发自适应职业学生证书查询系统职业资格等级会员证书管理网站
  • SMPP协议解析
  • mysql数据库连接数不足导致 Bean 注入失败
  • 4月28号
  • TCP三次握手
  • [TxRxResult] There is no status packet! 及 Incorrect status packet! 问题修复
  • 第一章 应急响应- Linux入侵排查
  • 文件基础-----C语言经典题目(11)
  • 前端vue2修改echarts字体为思源黑体-避免侵权-可以更换为任意字体统一管理
  • Linux 权限管理
  • API文档生成与测试工具推荐
  • 提示词工程实战指南:解锁AI创作的隐藏技巧与实例