首页 > 其他分享 >SpringBoot 集成 MybatisPlus 十——数据自动填充

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

时间:2023-04-15 18:33:15浏览次数:43  
标签:INSERT MybatisPlus SpringBoot 填充 插入 自动 数据 isDeleted

1 自动填充功能介绍

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

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

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

@TableLogic
@TableField(value = "isDeleted", fill = FieldFill.INSERT)
int isDeleted;

填充策略:

枚举值

描述

DEFAULT

默认值,不作填充

INSERT

插入操作填充字段

UPDATE

更新操作填充字段

INSERT_UPDATE

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

2 修改数据库

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

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

3 修改实体类

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

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

注意:

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

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

4 创建填充处理类

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

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

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

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

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

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

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

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

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() 方法。

@Test
public void testInsertUser(){
    User user = new User();
    user.insert();
}

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

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

==> Parameters: 0(Integer)

<==    Updates: 1

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

SpringBoot 集成 MybatisPlus 十——数据自动填充_插入数据_03

标签:INSERT,MybatisPlus,SpringBoot,填充,插入,自动,数据,isDeleted
From: https://blog.51cto.com/u_113754/6192409

相关文章

  • vue自定义密码输入框解决浏览器自动填充密码的问题
    问题描述浏览器对于type="password"的输入框会自动填充密码,但有时出于安全或者其他原因,我们不希望浏览器记住并自动填充密码。通过网上查到的一些解决方案,可以总结出以下几种解决方案(主要用edge浏览器进行测试):通过autocomplete="off"/autocomplete="new-password"来关闭浏览......
  • SpringBoot文件上传大小限制修改
    springboot默认文件上传大小限制为10M如需修改可以参考下面的配置文件spring.servlet.multipart.max-file-size=20MBspring.servlet.multipart.max-request-size=20MB配置说明:Thisconfigurationsetsthemaximumallowedsizeforbothindividualfilesandtheentirere......
  • springboot项目打成jar包后 ,配置文件加载的优先级顺序
    SpringBoot会按照以下顺序来加载配置文件:1、内置默认值:SpringBoot会首先加载内置的默认值,这些默认值定义在SpringBoot的代码中,例如,内置的默认端口号为8080。2、应用级别的配置文件:SpringBoot会从以下位置加载应用级别的配置文件,这些位置按照优先级逐一检查:当前目录下的/c......
  • Java MyBatis-Plus(4)MybatisPlus整合Pagehelper实现分页
    序言 /***pageInfo对象中属性含义*privateintpageNum;//当前页码*privateintpageSize;//设置每页多少条数据*privateintsize;//当前页有多少条数据*privateintstartRow;//当前页码第一条数据的*privateintendRow;//......
  • mybatisPlus-乐观锁
    数据库中添加version字段  自定义配置类中,添加乐观锁的拦截器packagecom.atguigu.config;importcom.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;importcom.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;im......
  • mybatisPlus-自动填充
      实体类importcom.baomidou.mybatisplus.annotation.IdType;importcom.baomidou.mybatisplus.annotation.TableField;importcom.baomidou.mybatisplus.annotation.TableId;importlombok.Data;importjava.util.Date;importstaticcom.baomidou.mybatisplus.ann......
  • SpringBoot配置了数据库依赖 报错: Failed to configure a DataSource: 'url' attrib
    错误2023-04-1511:56:16.025INFO12028---[restartedMain]ConditionEvaluationReportLoggingListener:ErrorstartingApplicationContext.Todisplaytheconditionsreportre-runyourapplicationwith'debug'enabled.2023-04-1511:56:16.060E......
  • Springboot-2
    1.springboot自动装配原理1.1springboot包扫描原理包建议放在主类所在包或者子包。默认包扫描的是主类所在的包以及子包。主函数运行时会加载使用@SpringBootApplication标记的类,-->包含@SpringBootApplication-->@EnableAutoConfiguration-->@AutoConfigurationPackage--......
  • springboot连接不同数据库的写法
    MySQL当url连接不指定/数据库名可以访问到mysql服务器上有权限的任何库,但是所有sql需要加上库名前缀.pom<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>配置spring:datasource:driver-class-n......
  • SpringBoot 集成 MybatisPlus 九——逻辑删除
    1逻辑删除的概念逻辑删除不会在数据库中删除数据,只是通过一个字段用来标识被删除的记录,数据仍然保存在数据库中。在实际的工作当中,因为数据非常重要,为了防止因用户误操作删除数据后无法恢复的问题,我们通常不会对数据做物理删除,即将数据从数据库中直接删除。而是多采用逻辑删除的方......