entity、VO、QO、DTO的区别

entity、VO、QO、DTO的区别本文介绍了 Java 中 Entity VO DTO 和 QO 的概念及其应用场景

大家好,欢迎来到IT知识分享网。

create table tb_dept( dept_id varchar(32) not null primary key, dept_name varchar(32) not null, dept_number varchar(32) not null, create_time datetime, create_by varchar(32), remark varchar(64), update_time datetime, update_by varchar(32), logic_delete tinyint(1) default 0 ); create table tb_employee( employee_id varchar(32) not null primary key, employee_name varchar(32) not null, create_time datetime, create_by varchar(32), update_time datetime, update_by varchar(32), logic_delete tinyint(1) default 0 ); 

1.entity

@Data @AllArgsConstructor @NoArgsConstructor @TableName("tb_dept")//指定映射的表名 public class Dept{ 
    @TableId(value = "dept_id", type = IdType.ASSIGN_ID)//主键,生成策略 private String deptId; private String deptNumber; private String deptName; private String createBy; private String remark;//备注 private LocalDateTime createTime; private String updateBy; private LocalDateTime updateTime; / * 逻辑删除(0:未删除,1:已删除) */ @JsonIgnore @TableLogic private Integer logicDelete; } 

员工实体类:

@Data @AllArgsConstructor @NoArgsConstructor @TableName("tb_employee")//指定映射的表名 public class Employee{ 
    @TableId(value = "employee_id", type = IdType.ASSIGN_ID)//指定主键 private String employeeId; private String employeeName; private String remark; private String createBy; private LocalDateTime createTime; private String updateBy; private LocalDateTime updateTime; / * 逻辑删除(0:未删除,1:已删除) */ @JsonIgnore @TableLogic private Integer logicDelete; } 

2.VO

VO:view object,视图对象。将需要返回给前端的字段封装成一个对象。业务数据需求:按部门id查询部门详情与相关员工信息。

@Data @AllArgsConstructor @NoArgsConstructor public class DeptVO{ 
    private String deptId; private String deptNumber; private String deptName; private String createBy; private String remark; private LocalDateTime createTime; private String updateBy; private LocalDateTime updateTime; private List<Employee> employeeList;//员工列表 } 

VO的内容基本上和entity一样,考虑到对于不同业务所需的字段不一样【某些字段对前端不重要,就不封装进去】,封装不一样的VO。
一般发起查询请求时,后端给前端的数据是一个VO实体。根据不同的业务需求,可以制定多个VO类,以满足特定需求。

3.DTO

@Data @AllArgsConstructor @NoArgsConstructor public class DeptDTO{ 
    / * 新增 */ public interface AddDept{ 
    } / * 修改 */ public interface EditDept{ 
    } / * 部门id,校验,在编辑部门信息时,需要传递deptId字段 */ @NotBlank(message = "标准id不能为空", groups = { 
   EditDept.class}) private String deptId; / *部门名称,不管是新增还是修改,部门名称都不能为空 */ @NotBlank(message = "标准名称不能为空", groups = { 
   AddDept.class, EditDept.class}) @Length(message = "最大长度不能超过32个字符", max = 32, groups = { 
   AddDept.class, EditDept.class}) private String deptName; / *部门编号 */ @NotBlank(message = "标准名称不能为空", groups = { 
   AddDept.class, EditDept.class}) @Length(message = "最大长度不能超过32个字符", max = 32, groups = { 
   AddDept.class, EditDept.class}) private String deptNumber; / *备注,部门信息描述,可填可不填,不加校验 */ private String remark; } 

控制层使用:

@PostMapping("/addDept") public AjaxResult addDept(@RequestBody @Validated(DeptDTO.AddDept.class) DeptDTO deptDTO) { 
    ... } 

一般新增和更改业务中,前端向后端传递的表单将封装成一个DTO对象

4.QO

QO:查询对象。将查询条件封装成一个QO对象。业务描述:可通过部门名称、部门编号,创建的时间段进行查询。

@Data @AllArgsConstructor @NoArgsConstructor public class DeptQO{ 
    private String deptName; private String deptNumber; / * 开始时间 */ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime beginTime; / * 结束时间 */ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime endTime; } 

一般条件查询请求时,从前端传递一个QO对象到后端。

总结:entity、VO、DTO内容大致一样,存在小小的差别。在没有要求代码规范的情况下,用一个Entity就可以了。如果有代码规范的要求,以便多人协作开发,可以参考本文章的写法。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/144453.html

(0)
上一篇 2025-04-26 17:45
下一篇 2025-04-26 18:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信