MybatisPlus的自动填充,学完这一步,节省大量重复代码

Mybatis-Plus框架为我们提供了操作数据库时,自动填充的策略。

在实体类的属性上加上@TableField(fill = FieldFill.xxxx),有以下四种策略

1、FieldFill.DEFAULT:默认值,不做任何填充操作。

2、FieldFill.INSERT:只在插入操作时进行填充。

3、FieldFill.UPDATE:只在更新操作时进行填充。

4、FieldFill.INSERT_UPDATE:同时在插入和更新操作时进行填充。这是常见的使用方式,用于记录创建时间和修改时间等字段

例如

    @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;

 可以告诉MyBatis-Plus框架在执行相应的数据库操作时如何进行字段填充。具体的填充操作需要结合数据库表和编写的SQL语句来实现。

@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info(metaObject.toString());

        //MyBatis 提供的方法,用于直接设置对象的属性值。
        //它不会进行任何判断和处理,直接将新值赋给对应的字段。
        metaObject.setValue("createTime", LocalDateTime.now());

        //strictInsertFill 方法是 MyBatis-Plus 提供的一个便捷方法,
        //用于进行严格模式的插入填充。它会判断 metaObject 对象中是否已经存在 createTime 字段的
        //值,如果存在则不执行填充,如果不存在则执行填充。这样可以确保在插入数据时,
        //只有当字段为空时才进行填充,避免覆盖已有的值。
        this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)

    }
}

@Compomemt 注册成为Bean,当执行数据库操作时,MyBatis-Plus 会检测到容器中存在 MetaObjectHandler 对象,并自动调用其中的方法(如 insertFill、updateFill)来进行字段填充

你可能感兴趣的:(java,spring,boot,mybatis)