历史表的作用
历史表的存在是为了记录对新建表的操作类型以及数据记录。
新建表与历史表的字段区别
新建表的字段是业务所需而建立的字段,历史表除了包含新建表的字段以外,需要添加以下三个字段:
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));