Mybatis—Plus自动填充字段

一.使用场景:

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

二.使用教程:

1:首先需要实现MetaObjectHandler接口 ,MetaObjectHandler是元对象字段填充控制器抽象类,实现公共字段自动写入。

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

  /**
     * 插入元对象字段填充(用于插入时对公共字段的填充)
     *
     * @param metaObject 元对象
     */
    void insertFill(MetaObject metaObject);

    /**
     * 更新元对象字段填充(用于更新时对公共字段的填充)
     *
     * @param metaObject 元对象
     */
    void updateFill(MetaObject metaObject);

下面是我们自己实现这个接口,实现插入数据和修改数据时的字段填充,代码如下:

它首先检查即将插入的对象(通过MetaObject表示)是否包含createTimeupdateTime字段的setter方法(即是否有这两个字段可以被设置值)。如果对象有updateTime字段的setter方法,则调用strictInsertFill方法来设置updateTime字段的值为当前时间(LocalDateTime.now()

public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override //插入数据时自动填充创建时间与更新时间
    public void insertFill(MetaObject metaObject) {
        boolean createTime = metaObject.hasSetter("createTime");
        boolean updateTime = metaObject.hasSetter("updateTime");
        if (updateTime) {
            strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
        }
        if (createTime) {
            strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
        }
    }

    @Override //修改数据时自动更新此次的修改时间
    public void updateFill(MetaObject metaObject) {
        boolean updateTime = metaObject.hasSetter("updateTime");
        if (updateTime) {
            strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
        }
    }
}
2. 在实体类上添加注解

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

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

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

注意:使用mapper.xml的sql不生效

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值