MybatisPlus插件自动维护更新和创建时间方式
作者:青衣画白扇
这篇文章主要介绍了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>
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。