公共字段自动填充

一、自动填充属性值

示例:一些时间戳,以及登记访问人,修改人等需要在数据库中自动填充的属性值,那么只需要在实体类中将属性值加上注解,然后再进行相关配置就可以了,在这里列举一下我做黑马的瑞吉外卖的笔记。

二、使用步骤

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解释)
  1. @Override: 这是一个注解,表示该方法是覆盖(Override)父类或接口的方法。

  2. public void insertFill(MetaObject metaObject): 这是方法的签名,它指定了方法名为insertFill,参数类型为MetaObject,返回类型为voidMetaObject是一个用于处理对象的元数据的类。

  3. log.info("公共字段自动填充[insert]...");: 这是一个日志输出语句,使用了log对象的info方法来输出一条信息。这条信息是用于记录公共字段自动填充的操作,其中[insert]表示这是在插入操作时进行的填充。

  4. log.info(metaObject.toString());: 这是另一条日志输出语句,用于将metaObject对象转换为字符串并输出到日志中。metaObject包含了要插入数据库的对象的元数据信息。

  5. metaObject.setValue("createTime", LocalDateTime.now());: 这行代码通过metaObject对象的setValue方法为createTime字段设置值。LocalDateTime.now()返回当前的日期和时间。

  6. metaObject.setValue("updateTime",LocalDateTime.now());: 这行代码与前一行类似,它为updateTime字段设置当前日期和时间的值。

  7. metaObject.setValue("createUser",BaseContext.getCurrentId());: 这行代码为createUser字段设置值。它使用BaseContext.getCurrentId()方法获取当前用户的ID,并将其设置为createUser字段的值。

  8. metaObject.setValue("updateUser",BaseContext.getCurrentId());: 这行代码与前一行类似,它为updateUser字段设置当前用户的ID的值。

总体而言,这段代码在插入对象到数据库之前,将一些公共字段(如createTimeupdateTimecreateUserupdateUser)设置为特定的值。日志输出语句用于记录填充操作的发生。


总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了公共字段填充,只需要两个步骤,非常简单吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值