在实体类需要自动填充的字段上加上@TableField注解,fill 属性是指定需要在何时自动填充数据
package com.itheima.reggie.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String username;
private String name;
private String password;
private String phone;
private String sex;
private String idNumber;
private Integer status;
//设置自动填充的字段并设置填充时机
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
//设置自动填充的字段并设置填充时机
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
//设置自动填充的字段并设置填充时机
@TableField(fill = FieldFill.INSERT)
private Long createUser;
//设置自动填充的字段并设置填充时机
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateUser;
}
实现MetaObjectHandler接口重写inserFill()方法和updateFill()方法
利用@Commponent注解把类交给springboot管理,IOC控制反转,可以被多个类中的相同字段使用
inserFill()在添加时利用setValue()方法加入新增时需要自动填充的字段,参数一为字段名,参数二为填充值。
updateFill()在修改时利用setValue()方法加入修改时需要自动填充的字段,参数一为字段名,参数二为填充值。
记得在启动类中条件@ServletComponentScan注解来扫描自动装配
@Component
@Slf4j
public class MyMetaObjecthandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("公共字段自动填充[insert]....");
metaObject.setValue("createTime", LocalDateTime.now());
metaObject.setValue("updateTime", LocalDateTime.now());
metaObject.setValue("createUser", BaseContext.getCurrentId());
metaObject.setValue("updateUser", BaseContext.getCurrentId());
}
@Override
public void updateFill(MetaObject metaObject) {
log.info("公共字段自动填充[update]....");
metaObject.setValue("updateTime", LocalDateTime.now());
metaObject.setValue("updateUser",BaseContext.getCurrentId());
}
}