MybatisPlus 插件自动维护更新和创建时间
什么要自动去维护这两个时间
在实际开发中基本上每张表中都有这两个类型的字段,创建时间和修改时间。是为了保证数据的可追溯性,当然肯定还是有操作日志记录表用来做追溯记录。开发中每一次的创建更新都需要手动去设置这一次操作的时间,会有很多的代码冗余。创建时间还好,只是在创建的时候去维护但是更新时间并不能通过DB去维护,MybatisPlus为我们提供了MetaObjectHandler 接口
面我们使用整个接口进行操作
先准备一下两个实体类
这个我们继承了一下 公共字段 PublicField
@Data
@TableName("sys_log")
public class SysLog extends PublicField implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 操作IP
*/
private String ip;
/**
* 操作类型 1 操作记录2异常记录
*/
private Integer runType;
/**
* 日志类型 1是登录日志2是操作日志
*/
private Integer logType;
/**
* 操作位置 1是租户 2是boss
*/
private Integer whereType;
/**
* 操作人
*/
private String userName;
/**
* 操作描述
*/
private String description;
/**
* 请求方法
*/
private String actionMethod;
private String actionUrl;
/**
* 请求参数
*/
private String params;
/**
* 浏览器
*/
private String browser;
/**
* 类路径
*/
private String classPath;
/**
* 请求方法
*/
private String requestMethod;
/**
* 开始时间
*/
private String startTime;
/**
* 完成时间
*/
private String finishTime;
/**
* 消耗时间
*/
private Long consumingTime;
/**
* 异常详情信息
*/
private String exDesc;
/**
* 异常描述
*/
private String exDetail;
/**
* 租户标识
*/
private String tenantDatakey;
/**
* 操作地点
*/
private String location;
/**
* 操作系统
*/
private String os;
/**
* 请求状态
*
*/
public Integer status;
/**
* 返回数据
*/
private String returnData;
}
公共字段类:
@Data
public class PublicField {
@TableId(value = "id" ,type = IdType.AUTO)
@ApiModelProperty(value = "ID")
private Integer id;
/**
* 创建时间
*/
@ApiModelProperty(value = "创建时间")
@TableField(value = "create_date",fill = FieldFill.INSERT)
private Date createDate;
/**
* 修改日期
*/
@ApiModelProperty(value = "修改时间")
@TableField(value ="update_date" ,fill= FieldFill.INSERT_UPDATE)
private Date updateDate;
}
下面我们配置一下
@Component
@Slf4j
public class MybatisPlusBaseHandler implements MetaObjectHandler {
//重写一下insertFill方法 在插入时进行时间的自动维护
@Override
public void insertFill(MetaObject metaObject) {
log.info("新增更新时间-------------------------");
this.strictInsertFill(metaObject,"createDate", Date.class,new Date());
this.strictUpdateFill(metaObject,"updateDate",Date.class,new Date());
}
// 修改操作是进行时间的维护
@Override
public void updateFill(MetaObject metaObject) {
log.info("修改更新时间-------------------------");
this.strictUpdateFill(metaObject,"updateDate",Date.class,new Date());
}
}
测试插入一条记录
输出结果:
修改日志记录:(系统没有修改只能写个测试类来测试啦)
@Test
public void inserint(){
SysLog sysLog = new SysLog();
sysLog.setId(2555);
sysLog.setDescription("测试修改时间能不能自动更新");
iLogServicel.updateById(sysLog);
}
输出结果:
在DB中也可以看到修改时间已经更新(因为创建的时候修改时间和创建时间是样的现在 修改时间已经更新)
最后我贴一下我的maven
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
感兴趣的可以去试试!!! 实践是检验真理的唯一方法! 明天见🥰🥰🥰
转载自:https://juejin.cn/post/7111870527987253261