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

 更新时间:2021年02月03日 11:31:14   作者:BADAO_LIUMANG_QIZHI  
这篇文章主要介绍了在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;
}

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

相关文章

  • SpringMVC的Dispatcher解读

    SpringMVC的Dispatcher解读

    这篇文章主要介绍了SpringMVC的Dispatcher用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Java接口统一样式返回模板的实现

    Java接口统一样式返回模板的实现

    这篇文章主要介绍了Java接口统一样式返回模板的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • SpringBoot实现接口等幂次校验的示例代码

    SpringBoot实现接口等幂次校验的示例代码

    本文主要介绍了SpringBoot实现接口等幂次校验的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • PipedWriter和PipedReader源码分析_动力节点Java学院整理

    PipedWriter和PipedReader源码分析_动力节点Java学院整理

    这篇文章主要介绍了PipedWriter和PipedReader源码分析_动力节点Java学院整理,需要的朋友可以参考下
    2017-05-05
  • jdk1.8中的for循环问题记录

    jdk1.8中的for循环问题记录

    这篇文章主要介绍了jdk1.8中的for循环及jdk1.8 新特性之 forEach 循环遍历问题,本文通过实例代码给大家详细讲解,需要的朋友可以参考下
    2022-11-11
  • Java提示解析时已到达文件结尾的解决方法

    Java提示解析时已到达文件结尾的解决方法

    在本篇文章中小编给大家分享了关于Java提示解析时已到达文件结尾的解决方法,需要的朋友们学习下。
    2019-07-07
  • java request.getParameter中文乱码解决方法

    java request.getParameter中文乱码解决方法

    今天跟大家分享几个解决java Web开发中,request.getParameter()获取URL中文参数乱码的解决办法,需要的朋友可以参考下
    2020-02-02
  • Java的Dialog和FileDialog你知道啊

    Java的Dialog和FileDialog你知道啊

    这篇文章主要为大家详细介绍了Java的Dialog和FileDialog,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • spring boot security自定义认证的代码示例

    spring boot security自定义认证的代码示例

    这篇文章主要介绍了spring boot security自定义认证,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • Java实现线性表的链式存储

    Java实现线性表的链式存储

    这篇文章主要为大家详细介绍了Java实现线性表的链式存储,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10

最新评论