Java包中DTO,VO, 实体类的区别

在软件开发中,实体类VO (Value Object)DTO (Data Transfer Object) 是常见的三种类,它们各自有不同的用途和含义。下面是它们之间的主要区别:

1. 实体类 (Entity Class)

实体类通常表示数据库中的一张表或某个持久化对象。在 ORM(如 Hibernate、MyBatis 等)框架中,实体类用来映射数据库中的记录。实体类通常包含数据库表中的字段,并且通常与数据库的字段类型一致。

  • 功能:表示数据库表的结构。
  • 用途:存储和操作数据库中的数据,通常作为持久化层使用。
  • 字段:与数据库表的字段直接映射,包含所有与数据持久化相关的属性。
  • 常见注解@Entity (JPA/Hibernate),@Table@Id@Column
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.Column;
    
    @Entity
    public class NursingProject {
    
        @Id
        private Long id;
        
        @Column
        private String image;
        
        @Column
        private String name;
        
        @Column
        private String nursingRequirement;
    
        @Column
        private Integer orderNo;
        
        @Column
        private Double price;
        
        @Column
        private String remark;
        
        @Column
        private Integer status;
        
        @Column
        private String unit;
        
        // Getter and Setter
    }
    

    2. VO (Value Object)

    VO 是用于表示视图层的数据对象,它通常与前端展示相关。VO 对象不直接映射到数据库,而是通常用于传递前端页面展示所需的数据,可能会对实体类进行筛选、过滤或聚合。

  • 功能:传递前端需要的数据,通常包含展示数据。
  • 用途:用于前端展示时的数据传输,通常对实体类做一定的封装和转换。
  • 字段:不一定包含所有实体类字段,通常是前端展示需要的字段。
    public class NursingProjectVo {
    
        private String name;
        private Double price;
        private String remark;
        
        // Getter and Setter
    }
    

    这里 NursingProjectVo 类通常用于封装从 NursingProject 实体类中筛选出来的部分字段,以便展示。

    3. DTO (Data Transfer Object)

    DTO 是用于传输数据的对象,通常在服务层或多个系统之间传递数据。DTO 类通常包含与业务相关的字段,通常对实体类进行了一定的封装,或者用于跨系统调用的接口参数。

  • 功能:在系统间或服务间传输数据,通常用于 API 调用。
  • 用途:用于简化数据传输,减少系统之间传递的数据量,封装一些业务逻辑。
  • 字段:可能包含业务需要的字段,不一定与实体类一一对应,通常用于跨系统的传输,可能有字段转换。
public class NursingProjectDto {

    private Long id;
    private String name;
    private Double price;
    private String nursingRequirement;
    
    // Getter and Setter
}

总结区别

属性实体类 (Entity)VO (Value Object)DTO (Data Transfer Object)
用途数据持久化,映射数据库表展示层数据传输(与前端展示有关)跨系统或服务的数据传输,封装传输对象
字段通常与数据库表字段一一对应,包含数据库相关字段包含前端需要的字段,不一定与数据库字段一致与业务逻辑相关的字段,不一定与实体类一致
注解JPA、Hibernate 注解(如 @Entity@Id 等)通常没有特定注解没有固定注解,常常用于 API 接口传输
示例@Entity class Userclass UserVo { String name, int age; }class UserDto { String name, String email; }
常见使用场景数据库映射,持久化数据用于前端数据展示的传输对象用于服务层或不同系统之间的数据传输

关键点:

  • 实体类 用于数据库映射,包含的是持久化数据。
  • VO 用于传输视图层需要的数据,通常经过一定的处理以适应展示需求。
  • DTO 用于在系统或服务之间传输数据,通常用来减少传输的字段,或者是业务逻辑的封装。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dd要努力变优秀!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值