一、自动填充属性值
示例:一些时间戳,以及登记访问人,修改人等需要在数据库中自动填充的属性值,那么只需要在实体类中将属性值加上注解,然后再进行相关配置就可以了,在这里列举一下我做黑马的瑞吉外卖的笔记。
二、使用步骤
1.创建实体类
代码如下(示例):
@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;
}
这里我们注意加粗绿色的属性
关于这些属性的解释
`fill` 属性用于指定填充行为,可以取以下枚举值:
- `FieldFill.DEFAULT`:默认值,不进行填充。
- `FieldFill.INSERT`:在执行插入操作时进行填充。
- `FieldFill.UPDATE`:在执行更新操作时进行填充。
- `FieldFill.INSERT_UPDATE`:在执行插入和更新操作时进行填充。
2.将对应的属性进行配置
实现MetaObjectHandler 接口,重写里面需要的方法
代码如下(示例):
public class MyMetaObjecthandler implements MetaObjectHandler {
/**
* 插入操作,自动填充
* @param metaObject
*/
@Override
public void insertFill(MetaObject metaObject) {
log.info("公共字段自动填充[insert]...");
log.info(metaObject.toString());metaObject.setValue("createTime", LocalDateTime.now());
metaObject.setValue("updateTime",LocalDateTime.now());
metaObject.setValue("createUser",BaseContext.getCurrentId());
metaObject.setValue("updateUser",BaseContext.getCurrentId());
}/**
* 更新操作,自动填充
* @param metaObject
*/
@Override
public void updateFill(MetaObject metaObject) {
log.info("公共字段自动填充[update]...");
log.info(metaObject.toString());long id = Thread.currentThread().getId();
log.info("线程id为:{}",id);metaObject.setValue("updateTime",LocalDateTime.now());
metaObject.setValue("updateUser",BaseContext.getCurrentId());
}
}
关于这段代码的详细解释(gpt解释)
@Override
: 这是一个注解,表示该方法是覆盖(Override)父类或接口的方法。
public void insertFill(MetaObject metaObject)
: 这是方法的签名,它指定了方法名为insertFill
,参数类型为MetaObject
,返回类型为void
。MetaObject
是一个用于处理对象的元数据的类。
log.info("公共字段自动填充[insert]...");
: 这是一个日志输出语句,使用了log
对象的info
方法来输出一条信息。这条信息是用于记录公共字段自动填充的操作,其中[insert]
表示这是在插入操作时进行的填充。
log.info(metaObject.toString());
: 这是另一条日志输出语句,用于将metaObject
对象转换为字符串并输出到日志中。metaObject
包含了要插入数据库的对象的元数据信息。
metaObject.setValue("createTime", LocalDateTime.now());
: 这行代码通过metaObject
对象的setValue
方法为createTime
字段设置值。LocalDateTime.now()
返回当前的日期和时间。
metaObject.setValue("updateTime",LocalDateTime.now());
: 这行代码与前一行类似,它为updateTime
字段设置当前日期和时间的值。
metaObject.setValue("createUser",BaseContext.getCurrentId());
: 这行代码为createUser
字段设置值。它使用BaseContext.getCurrentId()
方法获取当前用户的ID,并将其设置为createUser
字段的值。
metaObject.setValue("updateUser",BaseContext.getCurrentId());
: 这行代码与前一行类似,它为updateUser
字段设置当前用户的ID的值。总体而言,这段代码在插入对象到数据库之前,将一些公共字段(如
createTime
、updateTime
、createUser
和updateUser
)设置为特定的值。日志输出语句用于记录填充操作的发生。
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了公共字段填充,只需要两个步骤,非常简单吧