我们在做项目的时候,数据库中的某些字段如:创建人(create_user)、创建时间(create_time)、更新人(update_user)、更新时间(update_time)我们希望自动填充,不需要手动更新。
实体类import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
public class BasicEntity implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("创建人")
@TableField(value = "create_user", fill = FieldFill.INSERT)
private Long createUser;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty("创建时间")
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty("更新人")
@TableField(value = "update_user", fill = FieldFill.INSERT_UPDATE)
private Long updateUser;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty("更新时间")
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
@ApiModelProperty("业务状态")
@TableField(value = "status")
private Integer status;
@TableLogic
@ApiModelProperty("是否已删除")
@TableField(value = "is_deleted")
private Integer isDeleted;
}
填充器
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.utils.SecureUtil;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class MetaHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
BladeUser user = SecureUtil.getUser();
boolean hasSetter = metaObject.hasSetter("createTime");
if (hasSetter) {
this.setFieldValByName("createTime", new Date(), metaObject);
this.setFieldValByName("updateUser", user.getUserId(), metaObject);
this.setFieldValByName("updateTime", new Date(), metaObject);
this.setFieldValByName("updateUser", user.getUserId(), metaObject);
}
}
@Override
public void updateFill(MetaObject metaObject) {
BladeUser user = SecureUtil.getUser();
if (ObjectUtil.isEmpty(getFieldValByName("updateTime", metaObject))) {
this.setFieldValByName("updateTime", new Date(), metaObject);
this.setFieldValByName("updateUser", user.getUserId(), metaObject);
}
}
}
全局配置
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyBatisPlusConfig {
@Bean
public GlobalConfig globalConfig() {
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setMetaObjectHandler(new MetaHandler());
return globalConfig;
}
}
重启项目,以上四个字段便自动维护



