在MyBatisPlus中使用@TableField完成字段自动填充的操作

场景

官方文档:

字段注解 @TableField

com.baomidou.mybatisplus.annotations.TableField
描述
value 字段值(驼峰命名方式,该值可无)
update 预处理 set 字段自定义注入
condition 预处理 WHERE 实体条件自定义运算规则
el 详看注释说明
exist 是否为数据库表字段( 默认 true 存在,false 不存在 )
strategy 字段验证 ( 默认 非 null 判断,查看 com.baomidou.mybatisplus.enums.FieldStrategy )
fill 字段填充标记 ( FieldFill, 配合自动填充使用 )

字段填充策略 FieldFill

描述
DEFAULT 默认不处理
INSERT 插入填充字段
UPDATE 更新填充字段
INSERT_UPDATE 插入和更新填充字段

实现

实体类中有如下属性,通过上面的自动填充属性,我们可以实现

在进行插入操作时对

添加了注解@TableField(fill = FieldFill.INSERT)

的字段进行自动填充。

对添加了注解@TableField(fill = FieldFill.INSERT_UPDATE)

的字段在进行插入和更新时进行自动填充。

 /**
   * 创建人
   */
  @TableField(fill = FieldFill.INSERT)
  private Long creatorId;

  /**
   * 创建时间
   */
  @TableField(fill = FieldFill.INSERT)
  private Date gmtCreat;

  /**
   * 修改人
   */
  @TableField(fill = FieldFill.INSERT_UPDATE)
  private Long modifierId;

  /**
   * 修改时间
   */
  @TableField(fill = FieldFill.INSERT_UPDATE)
  private Date gmtModified;

  /**
   * 是否可用
   */
  @TableField(fill = FieldFill.INSERT)
  private Boolean availableFlag;

这样我们在具体业务中对实体类进行赋值就可以不用对这些公共字段进行赋值,在执行插入或者更新时就能自动赋值并插入数据库。

那么要自动赋的值在哪里配置?

在项目的config包下新建自动填充处理类使其实现接口MetaObjectHandler

并重写其方法:

package com.ws.api.config;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;

/**
 * 自动填充处理类
 * @author badao
 * @version 1.0
 * @see
 **/
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
  @Override
  public void insertFill(MetaObject metaObject) {
    this.setFieldValByName("modifierId", new Long(111), metaObject);
    this.setFieldValByName("gmtModified", new Date(), metaObject);
    this.setFieldValByName("creatorId", new Long(111), metaObject);
    this.setFieldValByName("gmtCreat",new Date(), metaObject);
    this.setFieldValByName("availableFlag",true, metaObject);
  }

  @Override
  public void updateFill(MetaObject metaObject) {
    this.setFieldValByName("modifierId", new Long(111), metaObject);
    this.setFieldValByName("gmtModified", new Date(), metaObject);
  }
}

其中方法参数中第一个是前面自动填充所对应的字段,第二个是要自动填充的值。

补充:Mybatis-Plus里 @TableField注解 自动赋值功能的配置类

package com.jt.auto;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
//完成自动填充功能
@Component //将该对象交给spring容器管理
public class MyMetaObjectHandler implements MetaObjectHandler {
  /**
   * 在POJO中添加了 新增/更新的注解,但是必须在数据库的字段中完成赋值的操作.
   * 所以.必须明确,新增/更新时操作的是哪个字段,及值是多少
   * * * @param metaObject
   */
  @Override
  public void insertFill(MetaObject metaObject) {
    this.setInsertFieldValByName("created", new Date(), metaObject);
    this.setInsertFieldValByName("updated", new Date(), metaObject);
  }
  @Override
  public void updateFill(MetaObject metaObject) {
    this.setUpdateFieldValByName("updated", new Date(), metaObject);
  }
}

@TableField注解完成自动填充赋值使用 案例:

package com.jt.pojo;
import java.io.Serializable;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import lombok.experimental.Accessors;
//pojo基类,完成2个任务,2个日期,实现序列化
@Data
@Accessors(chain=true)
public class BasePojo implements Serializable{
 @TableField(fill = FieldFill.INSERT) //新增有效
 private Date created;
 @TableField(fill = FieldFill.INSERT_UPDATE) //新增和更新有效
 private Date updated;
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • MybatisPlus中@TableField注解的使用详解

    实现 官方文档说明: com.baomidou.mybatisplus.annotations.TableField TableField注解新增属性 update 预处理 set 字段自定义注入 (讲解:比如我们使用mybatisplus自带的insert()方法向数据库插入数据时,假设我们给age字段赋值为1,但是我们在age字段上的@TableField注解里面加了update="%s+1",那么真真插入到数据库的值就是age=2,而不是age+1了) 例如: @TableFie

  • Mybatisplus自动填充实现方式及代码示例

    数据库表的创建时间.修改时间,这些个操作一遍都是自动化完成的,我们不希望手动更新.这时候自动填充便可以发挥作用了. 1.方式一 数据库级别(注意:不建议此方式,因为工作中不允许你修改数据库) 步骤 在表中新增字段create_time, update_time,给字段赋予默认值,在需要更新的字段(update_time)选择更新 在实体类增加对应属性 2.方式二 代码级别,建议使用 步骤 在实体类需要自动填充的属性上加注解 package com.yl.bean; import com.baom

  • Mybatis plus通用字段自动填充的示例

    在进行持久层数据维护(新增或修改)的时候,我们通常需要记录一些非业务字段,比如:create_time.update_time.update_by.create_by等用来维护数据记录的创建时间.修改时间.修改人.创建人等信息.通常情况下我们需要对这些字段进行手动赋值.赋值的过程也比较冗余,都是重复操作. 通常是为create_time赋值为系统的当前时间.update_time赋值为系统修改操作执行时的当前时间. create_by(创建人).update_by(修改人)赋值为当前的登录用户的

  • 在MyBatisPlus中使用@TableField完成字段自动填充的操作

    场景 官方文档: 字段注解 @TableField com.baomidou.mybatisplus.annotations.TableField 值 描述 value 字段值(驼峰命名方式,该值可无) update 预处理 set 字段自定义注入 condition 预处理 WHERE 实体条件自定义运算规则 el 详看注释说明 exist 是否为数据库表字段( 默认 true 存在,false 不存在 ) strategy 字段验证 ( 默认 非 null 判断,查看 com.baomido

  • Mybatis-Plus自动填充更新操作相关字段的实现

    在阿里开发手册的建表规约中有说明,数据库表中应该都要有create_time.update_time字段:那么在开发中,对于这些共有字段的处理应该要进行统一,这样就可以简化我们的开发过程.那么本文就对Mybatis-Plus中的字段自动填充进行记录. 场景介绍 在项目的数据表设计中,每张表都有create_id.create_time.update_id.update_time这四个字段,那么在Java应用中,针对新增和修改操作要对这四个字段进行相应的更改: create_id.update_i

  • MyBatis-Plus实现字段自动填充功能的示例

    目录 一.前言 二.实现 1. 实体类 2. 公用字段 - 使用注解填充字段 3. 自定义MyMetaObjectHandler字段自动填充处理类继承MetaObjectHandler 一.前言 在项目中,我们有一些公共的字段需要做修改 如: gmt_create:创建时间 creator_id:创建人 gmt_modified:修改时间 modifier_id:修改人 这时候我们可以采用 MyBatis-Plus 中的字段自动填充功能去实现 思路:抽取公用字段封装到BaseEntity类中,再

  • MyBatis-Plus实现公共字段自动填充功能详解

    目录 1.问题分析 2.实现步骤 3. 实现字段全局填充 1.问题分析 我们在开发中经常遇到多个实体类有共同的属性字段,例如在用户注册时需要设置创建时间.创建人.修改时间.修改人等字段,在用户编辑信息时需要设置修改时间和修改人等字段.这些字段属于公共字段,也就是很多表中都有这些字段,能不能对于这些公共字段在某个地方统一处理,来简化开发呢? 答案就是我们可是使用Mybatis Plus提供的公共字段自动填充功能. 2.实现步骤 Mybatis Plus公共字段自动填充,也就是在插入或者更新的时候为

  • MyBatis-Plus逻辑删除和字段自动填充的实现

    目录 一.ID生成策略 1.使用@TableId注解 2.全局ID生成策略 二.逻辑删除 1.全局配置 2.使用@TableLogic注解 三.字段自动填充 1.指定字段自动填充 2.自定义MetaObjectHandler 3.测试 四.执行SQL分析打印 1.添加 spy.properties配置文件 2.修改数据源配置 3.测试查询 一.ID生成策略 1.使用@TableId注解 @TableId注解:主键注解 使用位置:实体类主键字段. @Data @ToString @TableNam

  • mybatis-plus主键id生成、字段自动填充的实现代码

    一.主键id的生成 数据库表里通常都会有一个主键id,来作为这条数据的唯一标识. 常见的方式 1.数据库自动增长 这种很常见了,可以做到全库唯一.因为id是天然排序的,对于涉及到排序的操作会很方便. 2.UUID 上面的自动增长,虽然简单,但是对于分表这样的操作来说就比较麻烦.因为你在第二张插入数据的时候,需要拿到上一张表最后一个数据的id. UUID则不同,每次都一个随机唯一的值,不过因为是随机,所以也就没有排序了. 3.redis redis也可以用来生成id,利用redis的原子操作.好处

  • SpringBoot Mybatis Plus公共字段自动填充功能

    一.应用场景 平时在建对象表的时候都会有最后修改时间,最后修改人这两个字段,对于这些大部分表都有的字段,每次在新增和修改的时候都要考虑到这几个字段有没有传进去,很麻烦.mybatisPlus有一个很好的解决方案.也就是公共字段自动填充的功能.一般满足下面条件的字段就可以使用此功能: 这个字段是大部分表都会有的. 这个字段的值是固定的,或则字段值是可以在后台动态获取的. 常用的就是last_update_time,last_update_name这两个字段. 二.配置MybatisPlus 导包:

  • MybatisPlus 插入或更新数据时自动填充更新数据解决方案

    目录 解决方案 1. 实体类 2.拦截器MetaObjectHandler 3.测试 参考文章 Maven <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.6.RELEASE</version> <relativePath/>

  • ASP.NET中实现Form表单字段值自动填充到操作模型中

    我们知道ASP.NET MVC有个强大的地方就是Form表单提交到action的时候,可以直接将Form的参数直接装配到action的参数实体对象中 比如 复制代码 代码如下: action方法 Register(UserModel userModel) { ............................. } 在提交表单的时候,会自动讲表单里面的字段封装到对应的UserModel字段里面 那么 WebForm里面可不可以也紫将呢? 因为每次都要去获得数据,优秀的程序员应该要学会代码封

随机推荐