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

JAVA 中dao层的实体应该属于哪个层次VO,还是DTO,或者其他

在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层。

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

http://www.jsqmd.com/news/84161/

相关文章:

  • 第十五节:基于 Redis+MQ+DB实现高并发秒杀下的扣减方案2
  • SolidWorks工程图用途及深入介绍
  • kaggle colab cpu配置
  • Flutter 应用保活与后台任务:在 OpenHarmony 上实现定时上报
  • 数据库事务、并发控制与安全机制全解析:原理、实践与避坑指南
  • 基于ADM自适应增量调制算法的Matlab性能仿真 - 功能介绍及操作指南(Matlab 20...
  • java学习日志--API文档的小白使用介绍
  • 概率论与数理统计期末复习:大数定理与中心极限定理详解(扩展版)
  • 基于Plecs仿真的全桥PSFB移相技术:375V输入,48V输出,2.5kw功率传输的电源系...
  • AutoGLM 旧安卓一键变 AI 手机:安装与使用指南
  • PMC政策文本量化评估
  • 《深析游戏社交量化逻辑:解锁留存付费的核心传导路径》
  • Flutter 与 OpenHarmony 深度集成:实现跨设备传感器数据协同监测系统
  • 五相svpwm(4矢量+双空间调制),可用于反电势正弦和非正弦的的五相电机矢量控制。 附文档说明
  • 2025年TOP8角膜塑形镜清洗与选择攻略:打破近视困扰,体验新选择
  • DETR模型融合终极指南:3步打造高稳健性目标检测系统
  • 如何设计一门领域特定语言?
  • 同花顺短线精灵副图副图指标
  • 纯电动汽车Simulink仿真模型建模详细步骤。 通过文档的形式,跟着文档一步一步操作,既可以...
  • 2025年12月苏州装修品牌调研:盛世和家装饰深度解析 - 品牌测评鉴赏家
  • Product Hunt 每日热榜 | 2025-12-13
  • B样条曲线拟合能量约束方法介绍
  • 同花顺平衡多空看图操作多空理论
  • 2025年12月苏州装修品牌深度调研:盛世和家装饰实力解析 - 品牌测评鉴赏家
  • 2025年12月苏州装修公司深度调研:盛世和家装饰的核心优势解析 - 品牌测评鉴赏家
  • linux 根据端口查看进程
  • 【GORM(3)】Go的跨时代ORM框架!—— 数据库连接、配置参数;本文从0开始教会如何配备GORM的数据库
  • 2025年12月苏州装修品牌调研:盛世和家装饰的三大核心优势解析 - 品牌测评鉴赏家
  • ~给媳妇的新称呼~
  • 含GABA的睡眠益生菌品牌哪家靠谱?多款热门品牌解析 - 品牌排行榜