前提:
在开发工作中,基本上所有的数据表都可能会设计有创建时间、更新时间、创建人、更新人,在编写代码时反复的手写时间赋值和人员赋值的代码,会出现大量的冗余代码,还有可能出现忘记赋值的情况,自动填充的操作可以给我们省去很多的冗余代码,也保证了准确性
一、数据库层面的自动填充
数据库层面的自动填充是通过设置默认值来实现
在数据库创建的时候可以给时间、或者状态等字段设置默认的值,当代码执行数据插入操作的时候,就会自动填充数据进去
其中时间的自动填充需要将默认值设置为 CURRENT_TIMESTAMP
,状态等就看实际情况来确定
如果是更新时间,还可以勾选上根据当前的时间戳自动更新的选项
在图形化界面操作(小方这里使用的是Navicat),不一定会有 CURRENT_TIMESTAMP
的选项
我们可以根据下面的 SQL 去更新自己的表字段,为字段设置默认值
ALTER TABLE your_table_name
MODIFY COLUMN create_time datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间';
这样的操作小方建议可以作用于状态类的字段上,通常通过 0、1 来标记是否删除,是否有效等的状态字段通过数据库层面来实现数据插入时的自动填充会很方便,但是针对时间类的,建议还是通过代码层面来实现自动填充较好。且还有部分数据,如当前登录人、登录账号、部门等数据,数据库层面自动填充不了的,就只能通过代码来实现数据的自动填充
二、Mybatis-Plus 实现数据自动填充
在 SpringBoot + Mybatis-Plus 的项目中,我们可以通过一个拦截器来实现数据的自动填充
定义一个拦截器,实现 MetaObjectHandler
接口,实现其中的 insertFill
和 updateFill
方法,并将其注册到 Spring 容器中
package com.ghdi.svc.tech.modules.comm.handlers;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* @ClassName: MyMetaObjectHandler
* @Author: fang
* @Description:
*/
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createTime", new Date(), metaObject);
//SpringSecurity中获取当前登录用户的方式,读者可以根据项目实际情况去获取当前登录用户
UserDetails principal = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
this.setFieldValByName("createUser", principal.getUsername(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime", new Date(), metaObject);
}
}
上面两个实现的方法,insertFill
表示数据插入时的数据填充,updateFill
表示数据更新时的数据填充,metaObject
是当前操作的对象
之后再实体类需要实现填充数据的字段上加上注解
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT)
private Date createUser;
@TableField(fill = FieldFill.UPDATE)
private Date updateTime;
fill
是用来指定自动填充策略的,其中 FieldFill.INSERT
表示插入时填充数据,FieldFill.UPDATE
表示更新时填充数据
其他的相关策略可以看 MyBatis-Plus的官网