SpringBoot 集成 MybatisPlus 十——数据自动填充

2023-11-14 21:04:17 浏览数 (3)

1 自动填充功能介绍

自动填充功能可以在插入或修改时为对象属性自动赋值。

之前学习了逻辑删除字段,在向数据库插入数据时,都需要设置 isDeleted=0,这在进行频繁地数据插入时就显得有些繁琐,于是 MybatisPlus 就为我们提供了自动填充的功能。

修改实体类,为需要自动填充的字段在注解 @TableField 中添加 fill 属性。

代码语言:txt复制
@TableLogic
@TableField(value = "isDeleted", fill = FieldFill.INSERT)
int isDeleted;

填充策略:

枚举值

描述

DEFAULT

默认值,不作填充

INSERT

插入操作填充字段

UPDATE

更新操作填充字段

INSERT_UPDATE

插入操作和更新操作均填充字段

2 修改数据库

取消数据库中 isDeleted 列的默认值设置,这样在进行数据插入时,我们就必须要为该列设置数据。

3 修改实体类

实体类中,在 isDeleted 属性上的 @TableField 注解中增加 fill 属性,且将属性值设置为 FieldFill.INSERT,因为我们只需要在对数据进行插入操作时,才会使用到自动填充功能。

注意:

之前是将 versionisDeleted 两个属性的类型设置为了 int 型,在插入数据时,程序会将 int 型自动初始化为数值0,就会失去对数据自动填充验证的效果。

因此,这里需要修改这两个属性的类型为包装类 Integer 类型。

4 创建填充处理类

新建一个 handler 包,并在包下创建填充处理类 FillObjectHandler

该类需要实现接口 MetaObjectHandler,并重写该类的两个方法:

  • 用于插入数据时实现的填充逻辑 insertFill()
  • 用于更新数据时实现的填充逻辑 updateFill()

因为我们只是在插入数据时,需要MybatisPlus帮助我们填充字段,因些这里仅处理 insertFill() 方法,将其使用 setFieldValByName() 方法作为填充规则:

方法中三个参数分别表示:

被填充的列;用来填充的数据;被填充的元对象。

这里可以理解成将 User 对象中的 isDeleted 字段填充为 0。

同时为了能让 SpringBoot 识别该处理类,需要在类上增加注解 @Component

代码语言:java复制
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

@Component
public class FillObjectHandler implements MetaObjectHandler {
    //数据插入时的填充逻辑
    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("isDeleted", 0, metaObject);
    }

    //数据更新时的填充逻辑
    @Override
    public void updateFill(MetaObject metaObject) {

    }
}

5 自动填充效果验证

创建测试类,测试类中使用无参构造方法创建了实体类对象,并直接执行 insert() 方法。

代码语言:txt复制
@Test
public void testInsertUser(){
    User user = new User();
    user.insert();
}

查看控制台实际执行的SQL语句

==>  Preparing: INSERT INTO user ( isDeleted ) VALUES ( ? )

==> Parameters: 0(Integer)

<==    Updates: 1

数据使用自动填充功能成功入库。

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞