前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot 集成 MybatisPlus 十——数据自动填充

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

原创
作者头像
用户8100582
发布2023-11-14 21:04:17
4800
发布2023-11-14 21:04:17
举报
文章被收录于专栏:Java多线程Java多线程

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腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 自动填充功能介绍
  • 2 修改数据库
  • 3 修改实体类
  • 4 创建填充处理类
  • 5 自动填充效果验证
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档