news 2026/6/10 22:11:11

java dao层的实体是DTO,还是VO,还是其他的?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
java dao层的实体是DTO,还是VO,还是其他的?

在Java项目中,DAO层的实体通常指的是PO(Persistent Object,持久化对象)​ 或Entity(实体类),而不是DTO或VO。以下是详细解释:


1.PO(持久化对象) / Entity

  • 与数据库表直接映射,通常一个PO对应一张表。

  • 用于DAO层与数据库进行CRUD操作。

  • 一般使用JPA/Hibernate/MyBatis等ORM框架的注解(如@Entity@Table@Column)进行映射。

  • 示例:

    @Entity @Table(name = "user") public class User { @Id private Long id; private String name; // getters & setters }

2.DTO(Data Transfer Object,数据传输对象)

  • 用于层与层之间的数据传输(如Service → Controller,或Controller → 前端)。

  • 目的是封装数据、减少网络调用次数,可能组合多个PO的字段。

  • 示例:

    public class UserDTO { private String name; private String email; // 无数据库映射注解 }

3.VO(View Object,视图对象)

  • 用于展示层(如前端页面),根据UI需求定制字段。

  • 可能包含多个DTO/PO的组合、计算字段或格式化数据。

  • 示例:

    public class UserVO { private String displayName; private String avatarUrl; }

4.DAO层的角色

  • DAO层(Data Access Object)负责数据持久化操作(增删改查)。

  • 它的输入/输出通常是PO,因为PO直接对应数据库结构。

  • 在复杂查询时,DAO可能返回自定义对象(非表映射实体),这类对象可视为查询结果对象(Query Result Object),但仍属于PO的变体。


5.最佳实践与常见误区

对象

使用场景

是否用于DAO层?

PO

数据库映射

(主要用途)

DTO

层间数据传输

否(Service/Controller层)

VO

前端展示

否(Controller/View层)

  • 避免在DAO层使用DTO/VO:DAO应专注于持久化操作,不处理业务逻辑或展示逻辑。

  • 对象转换:通常通过工具(如MapStruct、Spring Converter)在PO、DTO、VO之间转换。


6.复杂场景示例

多表关联查询时,DAO层可能返回自定义对象(非严格PO):

// 非表映射的查询结果对象 public class UserOrderSummary { private String userName; private Integer orderCount; // 无@Entity注解 } // DAO接口 public interface UserDao { List<UserOrderSummary> findUserOrderSummary(); }

总结

  • DAO层实体首选PO/Entity,与数据库表结构一致。

  • DTO用于传输VO用于展示,二者不应出现在DAO层。

  • 保持分层清晰,避免对象混用,提高代码可维护性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 19:16:30

华为OD机试 - 整理版本号 - 正则表达式(Python/JS/C/C++ 双机位C卷 100分)

华为OD机试双机位C卷统一考试题库清单(持续收录中)以及考点说明(Python/JS/C/C++)。 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释…

作者头像 李华
网站建设 2026/6/10 15:38:38

巴菲特对公司治理的重视与分析

巴菲特对公司治理的重视与分析 关键词:巴菲特、公司治理、价值投资、股东权益、管理层激励、信息披露、长期发展 摘要:本文深入探讨了巴菲特对公司治理的重视及其相关分析。从巴菲特的投资理念出发,阐述了公司治理在其投资决策中的关键地位。详细剖析了公司治理的核心要素,…

作者头像 李华
网站建设 2026/6/10 14:41:50

PyTorch安装教程:使用Miniconda避免依赖地狱

PyTorch安装教程&#xff1a;使用Miniconda避免依赖地狱 在深度学习项目开发中&#xff0c;你是否曾遇到这样的场景&#xff1a;刚配好的PyTorch环境运行得好好的&#xff0c;结果一升级某个包&#xff0c;整个项目就报错&#xff1f;或者团队成员之间反复争论“为什么代码在我…

作者头像 李华
网站建设 2026/6/10 14:55:09

DPJ-147 基于单片机的可组合型履带式机器人设计

单片机型号&#xff08;STC89C52&#xff09; 目录一、摘要二、设计要求三、原理图四、说明书预览五、QA作者简介:电类领域优质创作者、多年架构师设计经验、多年校企合作经验&#xff0c;被多个学校常年聘为校外企业导师&#xff0…

作者头像 李华
网站建设 2026/6/10 14:42:16

解决‘CondaLockError’当多个进程同时访问环境时

解决“CondaLockError”当多个进程同时访问环境时 在现代AI开发中&#xff0c;你是否曾遇到过这样的场景&#xff1a;启动8个并行训练任务&#xff0c;前两个顺利运行&#xff0c;第三个却突然报错退出——提示 CondaLockError: Another conda process is already modifying th…

作者头像 李华
网站建设 2026/6/10 15:35:18

Tigshop开源商城系统【IM客服功能】改版上新,让商城沟通更高效!

客服功能作为商城系统的“后台中枢”&#xff0c;会直接影响到商家的服务效率与用户的购物体验。近期&#xff0c;Tigshop开源商城系统对内置的IM客服模板完成了一次针对性的改版&#xff0c;从界面到交互都进行了体验提升———我们可以从新版界面截图中&#xff0c;直观感受此…

作者头像 李华