mybatisPlus之自动填充工具MetaObjectHandler使用

一. 使用场景

MetaObjectHandler是元对象字段填充控制器抽象类,实现公共字段自动写入。

比如通常,我们在建表时,会设置几个公共字段:创建人(creator)、更新人(uptater)、创建时间(create_time)、更新时间(update_time)。

每次将实体对象新增入库时,都要设置创建人和创建时间;每次更新实体对象时,都要设置更新人和更新时间;如果这是都放在业务代码中,很是繁琐,那么可不可以统一配置,自动帮我们添加这些属性呢?答案就是使用MetaObjectHandler。

二. 使用姿势

官方说明:https://mp.baomidou.com/guide/auto-fill-metainfo.html
注意:不同版本api略有不同,但是步骤是一样的,接口也是一样的,本文是3.1.0 。

步骤如下:

1.实现MetaObjectHandler接口

MetaObjectHandler接口有两个接口方法,需要我们自己去实现它:

@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill ....");
          this.setFieldValByName("creator", bucUserBo.getEmpId(), metaObject);
         this.setFieldValByName("create_time", new Date(), metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start update fill ....");
        this.setFieldValByName("updater", "", metaObject);
        this.setFieldValByName("update_time", new Date(), metaObject);
    }
}

思路就是实现两个接口方法,一个更新,一个插入,然后对一些公共属性进行赋值操作;
对于更新人和创建人这两个属性,一般从Threadlocal中取值。

2. 实体类上添加注解

除了上面实现两个接口方法,还需要在对应实体的属性上添加注解,这样mybatisplus才会取进行赋值处理。

/**
 * 创建时间
 */
 @TableField(value = "create_time",fill = FieldFill.INSERT)
 @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;

/**
 * 创建者工号
 */
@TableField(value = "creator",fill = FieldFill.INSERT)
private String creator;

/**
 * 更新时间
 */
@TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;

/**
 * 更新者工号
 */
@TableField(value = "updater",fill = FieldFill.INSERT_UPDATE)
private String updater;

其中,FieldFill枚举有4个属性,

DEFAULT :默认不处理
INSERT : 插入操作时进行填充字段
UPDATE :更新操作时填充字段
INSERT_UPDATE :插入和更新操作时填充字段

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis Plus提供了自动填充(AutoFill)功能,它可以在插入或更新操作时自动填充指定字段的值。这在某些场景下非常有用,比如记录创建时间和更新时间等。 要使用自动填充功能,首先需要定义一个实现了`MetaObjectHandler`接口的类,并在其中实现`insertFill()`和`updateFill()`方法。这两个方法分别用于在插入和更新操作时填充字段的值。 在`insertFill()`方法中,你可以设置需要填充的字段和对应的值。例如,你可以使用`metaObject.setValue()`方法来设置某个字段的值。 在`updateFill()`方法中,你可以设置需要更新的字段和对应的值。同样地,你可以使用`metaObject.setValue()`方法来设置字段的新值。 接下来,需要在实体类的字段上标注注解来指定需要进行自动填充的字段。常用的注解包括`@TableField`和`@TableLogic`。 `@TableField`注解用于指定一个字段需要进行自动填充操作。你可以通过设置`fill`属性为`FieldFill.INSERT`或`FieldFill.UPDATE`来指定在插入或更新操作时进行填充。 以下是一个示例代码: ```java public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.setFieldValByName("createTime", new Date(), metaObject); this.setFieldValByName("updateTime", new Date(), metaObject); } @Override public void updateFill(MetaObject metaObject) { this.setFieldValByName("updateTime", new Date(), metaObject); } } ``` ```java @Data @Accessors(chain = true) @TableName("user") public class UserEntity { @TableId private Long id; private String name; @TableField(fill = FieldFill.INSERT) private Date createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime; } ``` 在上述示例中,`createTime`字段将在插入操作时进行填充,而`updateTime`字段将在插入和更新操作时进行填充。 需要注意的是,你还需要在配置文件中配置自动填充功能。可以通过在配置文件中添加`meta-object-handler`配置项来指定自定义的`MetaObjectHandler`实现类。 这样设置后,当执行插入或更新操作时,MyBatis Plus会自动调用对应的自动填充方法,并填充相应的字段值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值