为新建表建立历史表

历史表的作用

历史表的存在是为了记录对新建表的操作类型以及数据记录。

新建表与历史表的字段区别

新建表的字段是业务所需而建立的字段,历史表除了包含新建表的字段以外,需要添加以下三个字段:

operator_by
operator_type
operator_time

历史表的封装方法(写成一个工具类)

public class HisTableUtils {

    public static <T extends BaseHisEntity> T insertHisTableInfo(T T, String operType){

        T.setOperatorBy(SecurityUtils.getUsername());
        T.setOperatorType(operType);
        T.setOperatorTime(DateUtils.getNowDate());
        return T;
    }
}

一般情况实体类会继承BaseEntity,在添加历史表时,我们把继承关系略加改动,将T类型的实体类继承BaseHisEntity,BaseHisEntity再继承BaseEntity。

public class BaseHisEntity extends BaseEntity{


    private Long hisId;
    private String operatorType;
    private String operatorBy;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date operatorTime;
    }

在BaseHisEntity增加Getter and Setter

public Long getHisId() {
        return hisId;
    }

    public void setHisId(Long hisId) {
        this.hisId = hisId;
    }

    public String getOperatorType() {
        return operatorType;
    }

    public void setOperatorType(String operatorType) {
        this.operatorType = operatorType;
    }

    public String getOperatorBy() {
        return operatorBy;
    }

    public void setOperatorBy(String operatorBy) {
        this.operatorBy = operatorBy;
    }

    public Date getOperatorTime() {
        return operatorTime;
    }

    public void setOperatorTime(Date operatorTime) {
        this.operatorTime = operatorTime;
    }

创建历史表操作类型的常量类:

public class HistoryOperTypeConstants {

    /**
     *历史表新增
     */
    public static final String ADD = "I";
    /**
     *历史表修改前
     */
    public static final String UPDATE_BEFORE = "X";
    /**
     *历史表修改后
     */
    public static final String UPDATE_AFTER = "U";
    /**
     *历史表删除
     */
    public static final String DELETE = "D";
}

使用基于若依系统的代码生成器,保留历史表相关文件的XXXMapper以及XXXMapper.xml。
修改XXXMapper中原有变量类型(XXXHis)改为(XXX)
修改XXXMapper.xml中的parameterType="XXXHis"改为parameterType="XXX"

操作表时将增删改的数据插入历史表

在新建表的service层Impl中(XXX代表实体类名称)

@Autowired
private XXXHisMapper XXXHisMapper;

在新增方法中

XXXHisMapper.insertXXXHis(HisTableUtils.insertHisTableInfo(XXX, HistoryOperTypeConstants.ADD));

在修改方法中

XXX oldData = XXXMapper.selectXXXById(XXX.getId());
//将修改前数据插入历史表
XXXHisMapper.insertXXXHis(HisTableUtils.insertHisTableInfo(oldData, HistoryOperTypeConstants.UPDATE_BEFORE));

XXX.setUpdateTime(DateUtils.getNowDate());
XXX.setUpdateBy(SecurityUtils.getUsername());
//将修改后数据插入历史表
XXXHisMapper.insertSysXXXHis(HisTableUtils.insertHisTableInfo(XXX, HistoryOperTypeConstants.UPDATE_AFTER));

在删除方法中

List<XXX> list = XXXMapper.selectXXXByIds(ids);
list.forEach(item->{
//将删除的数据插入历史表
XXXHisMapper.insertXXXHis(HisTableUtils.insertHisTableInfo(item, HistoryOperTypeConstants.DELETE));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值