DTO、VO、Entity的区别

前言

最近在写代码的时候,对于Entity、VO、DTO的概念有些混淆,不太了解具体的用途以及作用,所以想梳理一下。
在这里插入图片描述

概念

阿里巴巴Java开发手册中介绍:

DO(Data Object):此对象与数据库表结构一一对应,通过 DAO层向上传输数据源对象。
DTO(Data Transfer Object):数据传输对象,Service 或Manager 向外传输的对象。
VO(View Object):显示层对象,通常是 Web 向模板渲染引擎层传输的对象。

我的理解如下:
实体类有 VO DTO和Entity三种,其中:

  • Entity就是一般和数据库对应的实体类,需要与数据库一一对应。
  • DTO是数据传输对象,用来接收前端传过来的参数,一般会把前端传过来的参数封装进DTO,然后在Service中复制给新new的entity对象,然后进行持久化。
  • VO就是返回给前端的视图对象。

案例

UserPhoneModifyEntity:

@Data
@TableName("user_phone_modify")
@EqualsAndHashCode(callSuper = true)
@ApiModel(description = "修改用户手机号")
public class UserPhoneModify extends Model<UserPhoneModify> {
    
    

    private static final long serialVersionUID = 1L;

    /**
     * PK
     */
    @ApiModelProperty(value = "PK")
    @TableId(type = IdType.ASSIGN_ID)
    private String id;
    /**
     * 逻辑删除标记(0:显示;1:隐藏)
     */
    @ApiModelProperty(value = "逻辑删除标记")
    private String delFlag;

    @ApiModelProperty(value = "用户ID")
    private String userId;

    @ApiModelProperty(value = "姓名")
    @NotNull(message = "姓名不能为空")
    @NotBlank(message = "姓名不能为空")
    private String userName;

    @ApiModelProperty(value = "工号")
    @NotNull(message = "工号不能为空")
    @NotBlank(message = "工号不能为空")
    private String workNo;
 
    @ApiModelProperty(value = "新手机号")
    @NotNull(message = "新手机号不能为空")
    @NotBlank(message = "新手机号不能为空")
    private String newMobile;

    @ApiModelProperty(value = "旧手机号")
    @NotNull(message = "旧手机号不能为空")
    @NotBlank(message = "旧手机号不能为空")
    private String oldMobile;

    @ApiModelProperty(value = "创建时间")
    private LocalDateTime createTime;

    @ApiModelProperty(value = "创建者")
    private String createBy;

    @ApiModelProperty(value = "最后更新时间")
    private LocalDateTime updateTime;

    @ApiModelProperty(value = "更新者")
    private String updateBy;

    @ApiModelProperty(value = "备注")
    private String remark;

    @ApiModelProperty(value = "审核状态(0审核中 1审核通过 2审核不通过)")
    private String verifyStatus;
}

要与UserPhoneMapper.xml的resultMap 一一对应。

    <resultMap id="userPhoneRecordMap" type="com.entity.user.UserPhoneModify">
        <id property="id" column="id"/>
        <result property="delFlag" column="del_flag"/>
        <result property="userId" column="user_id"/>
        <result property="userName" column="user_name"/>
        <result property="workNo" column="work_no"/>
        <result property="newMobile" column="new_mobile"/>
        <result property="oldMobile" column="old_mobile"/>
        <result property="verifyStatus" column="verify_status"/>

        <result property="createTime" column="create_time"/>
        <result property="createBy" column="create_by"/>
        <result property="updateTime" column="update_time"/>
        <result property="updateBy" column="update_by"/>
        <result property="remark" column="remark"/>
    </resultMap>

现在有一个需求,需要在user_phone_modify表中关联查询出go_hr_emp表的mobile字段作为user_phone_modify表的sap_new_mobile,并在前端显示出来。
注意:sap_new_mobile 这个字段user_phone_modify表里是没有的。
这时候就可以用到VO了。

UserPhoneModifyVO

/**
 * @Description:  新增SAP系统新手机号查询修改用户手机号
 */
@Data
@ApiModel(description = "修改用户手机号")
public class UserPhoneModifyVO {
    
    
    /**
     * PK
     */
    @ApiModelProperty(value = "PK")
    private String id;
    /**
     * 逻辑删除标记(0:显示;1:隐藏)
     */
    @ApiModelProperty(value = "逻辑删除标记")
    private String delFlag;
  
    @ApiModelProperty(value = "用户ID")
    private String userId;

    @ApiModelProperty(value = "姓名")
    private String userName;

    @ApiModelProperty(value = "工号")
    private String workNo;
 
    @ApiModelProperty(value = "新手机号")
    private String newMobile;

    @ApiModelProperty(value = "旧手机号")
    private String oldMobile;
	/**
	 * SAP系统新手机号
	 */
	@ApiModelProperty(value = "SAP系统新手机号")
	private String sapNewMobile;

    @ApiModelProperty(value = "创建时间")
    private LocalDateTime createTime;

    @ApiModelProperty(value = "创建者")
    private String createBy;

    @ApiModelProperty(value = "最后更新时间")
    private LocalDateTime updateTime;

    @ApiModelProperty(value = "更新者")
    private String updateBy;

    @ApiModelProperty(value = "备注")
    private String remark;

    /**
     * 审核状态(0审核中 1审核通过 2审核不通过)
     */
    @ApiModelProperty(value = "审核状态(0审核中 1审核通过 2审核不通过)")
    private String verifyStatus;
}

UserPhoneMapper.xml要添加下面的代码:

	<resultMap id="userPhoneRecordMap1" type="com.vo.UserPhoneModifyVO">
		<id property="id" column="id"/>
		<result property="delFlag" column="del_flag"/>
		<result property="userId" column="user_id"/>
		<result property="userName" column="user_name"/>
		<result property="workNo" column="work_no"/>
		<result property="newMobile" column="new_mobile"/>
		<result property="oldMobile" column="old_mobile"/>
		<result property="sapNewMobile" column="sap_new_mobile"/>
		<result property="verifyStatus" column="verify_status"/>

		<result property="createTime" column="create_time"/>
		<result property="createBy" column="create_by"/>
		<result property="updateTime" column="update_time"/>
		<result property="updateBy" column="update_by"/>
		<result property="remark" column="remark"/>
	</resultMap>

	<sql id="selectUserPhoneVo">
	    id, del_flag, user_id, user_name, work_no, new_mobile, old_mobile ,verify_status ,create_time ,create_by
		,update_time ,update_by,remark
	</sql>

	<select id="selectPage1" resultType="com.vo.UserPhoneModifyVO" resultMap="userPhoneRecordMap1">
		select <include refid="selectUserPhoneVo"/>,h.mobile as sap_new_mobile
		from user_phone_modify u left join go_hr_emp h
		on h.userId=u.work_no;
	</select>

DTO:
当前端自定义paramsSubmit对象需要传入后端时:

      paramsSubmit: {
    
    
        id: "",
        serviceNameList: "",
      },

后端
第一步:WhiteListUpdateDTO

@Data
public class WhiteListUpdateDTO {
    
    

    private String id;

    /**
     * 服务名称列表
     */
    private String  serviceNameList;

}

第二步:control

    @ApiOperation(value = "修改白名单记录")
    @PutMapping
    public R update(@RequestBody WhiteListUpdateDTO whiteListUpdateDTO) {
    
    
        return R.ok(whiteListService.updateWhiteList(whiteListUpdateDTO));
    }

具体可看此篇的后端描述部分:【ids】改造白名单功能

猜你喜欢

转载自blog.csdn.net/someday____/article/details/127848183