增删改 - 01 - 增删改流程

本文详细介绍了事务中的增删改操作流程,包括入参的验证(如非空、正则检查),使用DTO进行数据封装,从DTO到实体类的转换,以及如何在服务层和DAO层进行数据库操作和异常处理,确保数据的一致性和完整性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

增删改事务 - 01 - 增删改流程

1. 流程概述

增删改作为事务相关的处理,需要格外注意入参的正确性,不正确的参数可能会导致异常

增删改操作时,用 DTO 来封装待修改数据,对DTO进行入参校验,校验完毕后,传入 service 层,将 DTO 转为 entity,存储到数据库

四个词就能概括下图:入参,校验,转换,入库

DTO增删改流程

2. 流程细化

在这里举个简单的流程栗子:

2.1 入参 + 校验

2.1.1 构建DTO入参类,并做基础校验
/** DTO,非空校验添加的地方 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class WorkOperatorDTO {
   
    
    /** 主键ID */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /** 作业单位ID */
    @NotNull(message = "作业单位ID不能为空")
    private Long workCompId;

    /** 电子工牌 - 非必填,可以设为 Null 或者 空字符串,修改 MP 的更新策略,使其不会跳过 NULL 的列 */
    @TableField(updateStrategy = FieldStrategy.IGNORED)
    private String eleWorkCard;

    /** 身份证号 */
    @NotBlank(message = "身份证号不能为空")
    @Size(max = 18, message = "身份证号长度不能超过18位")
    private String idCardNumber;

    /** 关联的 ids */
    @NotEmpty(message = "关联的 ids 不能为空")
    List<Long> ids;
    
    /** 入职日期 */
    @NotBlank(message = "入职日期不能为空,格式yyyy-MM-dd")
    @Pattern(regexp = "^\\d{4}-\\d{2}-\\d{2}$", message = "入职日期格式错误(yyyy-MM-dd)")
    private String comeInDate;
}

2.1.2 在 controller 里面做复杂校验

注: ValidationUtils 是自己写的一个小工具类,主要判断字符串是否匹配正则表达式

/** Controller层 */
import javax.annotation.Resource;

@RestController
@RequestMapping("/work-operator")
public class WorkOperatorController {
   

    @Resource
    private IWorkOperatorService workOperatorService;

    /**
     * 入参校验,能够统一处理,则放到统一校验类里面,否则放到自己的类里处理
     * @param dto 增改时的入参类
     * @return
     */
    private R checkDTO(WorkOperatorDTO dto) {
   
        //  简单校验:身份证号、身份证号和性别匹配
        if (dto.getIdCardNumber().length() != ValidationUtils.CHINA_ID_MAX_LENGTH) {
   
            return R.fail(ConstantMessage.NOT_CHINA_ID_MAX_LENGTH);
        }
        if (!ValidationUtils.matchTargetRegex(dto.getIdCardNumber(), ValidationUtils.ID_CARD_REGEX)) {
   
            return R.fail(ConstantMessage.NOT_CHINA_ID);
        }
        //  校验性别
        int sexRes = Integer.parseInt(dto.getIdCardNumber().substring(16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值