Mybatis-Plus MetaObjectHandler基操及源码解析


参考【 https://baomidou.com/guides/auto-fill-field/

在 MyBatis-Plus 中提供了一个便捷的自动填充功能。MetaObjectHandler 是一个用于处理实体对象的元对象的接口。它允许我们在插入、更新、删除等操作之前或之后,对实体对象进行自定义处理。通过 MetaObjectHandler,我们可以实现如自动填充创建时间、更新时间、删除标记等功能。

一、基操

1.1 实现 MetaObjectHandler接口

在上面的示例中,我们使用了 @Component 注解,确保MyMetaObjectHandler类被 Spring 管理。我们创建了一个名为MyMetaObjectHandler 的类,并实现了 MetaObjectHandler 接口。在insertFill方法中,我们自动填充了创建人和创建时间。在 updateFill方法中,我们自动更新数据库表中更新时间与更新人。

/**
 * 通用字段处理器
 */
@Component
@Slf4j
public class CommonFieldHandler implements MetaObjectHandler {
   
   

    @Override
    public void insertFill(MetaObject metaObject) {
   
   
        UserBean userBean = LoginUtil.get();
        if (userBean != null) {
   
   
            // 创建人ID
            setFieldValByName("createUserId", LoginUtil.get().getId(), metaObject);
            // 创建人名称
            setFieldValByName("createUserName", LoginUtil.get().getName(), metaObject);
            // 创建时间
            setFieldValByName("createTime", new Date(), metaObject);
        }
    }

    @Override
    public void updateFill(MetaObject metaObject) {
   
   
        UserBean userBean = LoginUtil.get();
        if (userBean != null) {
   
   
            // 更新人ID
            setFieldValByName("updateUserId", LoginUtil.get().getId(), metaObject);
            // 更新人名称
            setFieldValByName("updateUserName", LoginUtil.get().getName(), metaObject);
            // 更新时间
            setFieldValByName("updateTime", new Date(), metaObject);
        }
    }
}

在上面的示例中,将 CommonFieldHandler 类交由 Spring IoC容器进行管理。在insertFill方法中,自动填充了创建人和创建时间。在 updateFill方法中,自动填充更新人与更新时间。

1.2 使用 MetaObjectHandler

在实体类中,通过 @TableFile(fill = FieldFill.INSERT) 添加创建人、创建时间,通过 @TableField(fill = FieldFill.UPDATE) 添加更新人、更新时间字段,如下:

@Data
public class BaseBean implements Serializable {
   
   
    private static final long serialVersionUID = -63039799721058887L;
    @ApiModelProperty(value = "id")
    @TableId(type = IdType.AUTO)
    private Long id;

    @ApiModelProperty(value = "创建人ID")
    @TableField(fill = FieldFill.INSERT)
    private Long createUserId;

    @ApiModelProperty(value = "创建人名称")
    @TableField(fill = FieldFill.INSERT)
    private String createUserName;

    @ApiModelProperty(value = "创建时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    @ApiModelProperty(value = "更新人ID")
    @TableField(fill = FieldFill.UPDATE)
    private Long updateUserId;

    @ApiModelProperty(value = "更新人名称")
    @TableField(fill =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值