@TableField(fill = FieldFill.INSERT_UPDATE)

@TableField(fill = FieldFill.INSERT)、@TableField(fill = FieldFill.INSERT_UPDATE)这两个注解经常在项目中使用到,他MyBatis-Plus 库中的注解,它用于指定字段在执行数据库表的插入和更新操作时的填充策略。

 

@TableField(fill = FieldFill.INSERT_UPDATE)详细介绍
功能:
@TableField(fill = FieldFill.INSERT_UPDATE) 注解用于指示在插入和更新操作期间自动填充字段的值。通常,该注解应用于实体类字段,这些字段映射到数据库表中的列。
填充策略:
注解的 fill 属性指定了字段的填充策略。有几个选项可用:
FieldFill.DEFAULT:这是默认的填充策略,表示字段不应自动填充。
FieldFill.INSERT:该策略指示字段在插入操作时自动填充。
FieldFill.UPDATE:该策略指示字段在更新操作时自动填充。
FieldFill.INSERT_UPDATE:该策略指示字段在插入和更新操作时都自动填充。 

 

 字段上添加注解

对应的字段分别加上@TableField(fill = FieldFill.INSERT)和@TableField(fill = FieldFill.INSERT_UPDATE)注解

具体如下:

Student实体类

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serializable;
import java.util.Date;

@Data
@EqualsAndHashCode(callSuper = false)
@TableName("student")
@ApiModel(value="Student对象", description="学生表")
public class Student implements Serializable {

private static final long serialVersionUID = 1L;

@ApiModelProperty(value = "自增ID")
@TableId(value = "id", type = IdType.AUTO)
private Integer id;

@ApiModelProperty(value = "姓名")
private String name;

@ApiModelProperty(value = "性别")
private Integer sex;

@ApiModelProperty(value = "生日")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date birthday;

@ApiModelProperty(value = "身份证号")
private String idCard;

@ApiModelProperty(value = "手机号")
private String phone;

@ApiModelProperty(value = "创建人")
@TableField(fill = FieldFill.INSERT)
private Integer creatorId;

@ApiModelProperty(value = "创建时间")
@TableField(fill = FieldFill.INSERT)
private Date createTime;

@ApiModelProperty(value = "更新人")
@TableField(fill = FieldFill.INSERT_UPDATE)
private Integer updaterId;

@ApiModelProperty(value = "更新时间")
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;


}
 

添加元数据对象处理器
添加元数据对象处理器,实现MetaObjectHandler类

注意:这个类加上要加@Component注解,这样spring容器才能管理到

import cn.dev33.satoken.stp.StpUtil;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.Optional;

@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill");
// 创建时间使用当前时间填充
this.setFieldValByName("createTime", new Date(), metaObject);
// 更新时间使用当前时间填充
this.setFieldValByName("updateTime", new Date(), metaObject);
// 创建人id使用当前登录人id填充,没有的话默认设置1
this.setFieldValByName("creatorId", Optional.ofNullable(StpUtil.getLoginIdDefaultNull()).orElse(1), metaObject);
// 更新人id使用当前登录人id填充,没有的话默认设置1
this.setFieldValByName("updaterId", Optional.ofNullable(StpUtil.getLoginIdDefaultNull()).orElse(1), metaObject);
}

@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill");
// 更新时间使用当前时间填充
this.setFieldValByName("updateTime", new Date(), metaObject);
// 更新人id使用当前登录人id填充,没有的话默认设置1
this.setFieldValByName("updaterId", Optional.ofNullable(StpUtil.getLoginIdDefaultNull()).orElse(1), metaObject);
}

}
实现MetaObjectHandler中的insertFill、updateFill方法 

 

posted @ 2025-08-28 17:27  KLAPT  阅读(129)  评论(0)    收藏  举报