MyBatis-Plus 更新时间注入失败

项目中使用了MyBatis-Plus(version:3.3.2),为了自动注入时间,按照官方文档进行如下设置:

@Component
public class CustomMetaObjectHandler implements MetaObjectHandler {
    
    

    @Override
    public void insertFill(MetaObject metaObject) {
    
    
        this.strictInsertFill(metaObject, "gmtCreate", LocalDateTime.class, LocalDateTime.now());
    }

    @Override
    public void updateFill(MetaObject metaObject) {
    
    
        this.strictUpdateFill(metaObject, "gmtModified", LocalDateTime.class, LocalDateTime.now());
    }
}

相关实体对象

public class DemoDO{
    
    

    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime gmtCreate;

    @TableField(fill = FieldFill.UPDATE)
    private LocalDateTime gmtModified;
}

但是使用过程中发现一个问题:更新时,原来时间有值不会填充新时间
后来查阅文档时,看到默认策略是:如果属性有值则不覆盖,如果填充值为null则不填充。故更改如下:

@Component
public class CustomMetaObjectHandler implements MetaObjectHandler {
    
    

    @Override
    public void insertFill(MetaObject metaObject) {
    
    
        this.strictInsertFill(metaObject, "gmtCreate", LocalDateTime.class, LocalDateTime.now());
    }

    @Override
    public void updateFill(MetaObject metaObject) {
    
    
        this.strictUpdateFill(metaObject, "gmtModified", LocalDateTime.class, LocalDateTime.now());
    }

    @Override
    public MetaObjectHandler strictFillStrategy(MetaObject metaObject, String fieldName, Supplier<Object> fieldVal) {
    
    
    	// 每次填充,直接使用填充值
        Object obj = fieldVal.get();
        if (Objects.nonNull(obj)) {
    
    
            metaObject.setValue(fieldName, obj);
        }
        return this;
    }
}

不填充情况:

在mybatisplus 调用类似 update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper updateWrapper) 方法时,如果entity为null,则填充不生效。

猜你喜欢

转载自blog.csdn.net/qq_34789577/article/details/109034191