热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

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

这篇文章主要介绍了在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;
}

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


推荐阅读
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 本文探讨了在 ASP.NET MVC 5 中实现松耦合组件的方法。通过分离关注点,应用程序的各个组件可以更加独立且易于维护和测试。文中详细介绍了依赖项注入(DI)及其在实现松耦合中的作用。 ... [详细]
  • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
  • 网易严选Java开发面试:MySQL索引深度解析
    本文详细记录了网易严选Java开发岗位的面试经验,特别针对MySQL索引相关的技术问题进行了深入探讨。通过本文,读者可以了解面试官常问的索引问题及其背后的原理。 ... [详细]
  • 本文将深入探讨如何在不依赖第三方库的情况下,使用 React 处理表单输入和验证。我们将介绍一种高效且灵活的方法,涵盖表单提交、输入验证及错误处理等关键功能。 ... [详细]
  • 探索电路与系统的起源与发展
    本文回顾了电路与系统的发展历程,从电的早期发现到现代电子器件的应用。文章不仅涵盖了基础理论和关键发明,还探讨了这一学科对计算机、人工智能及物联网等领域的深远影响。 ... [详细]
  • 科研单位信息系统中的DevOps实践与优化
    本文探讨了某科研单位通过引入云原生平台实现DevOps开发和运维一体化,显著提升了项目交付效率和产品质量。详细介绍了如何在实际项目中应用DevOps理念,解决了传统开发模式下的诸多痛点。 ... [详细]
  • 本文详细介绍了 Flink 和 YARN 的交互机制。YARN 是 Hadoop 生态系统中的资源管理组件,类似于 Spark on YARN 的配置方式。我们将基于官方文档,深入探讨如何在 YARN 上部署和运行 Flink 任务。 ... [详细]
  • 题库来源:安全生产模拟考试一点通公众号小程序G3锅炉水处理报名考试是安全生产模拟考试一点通生成的,G3锅炉水处理证模拟考试题库是根据G3锅炉水处理最新 ... [详细]
  • 在本周的白板演练中,Apache Flink 的 PMC 成员及数据工匠首席技术官 Stephan Ewen 深入探讨了如何利用保存点功能进行流处理中的数据重新处理、错误修复、系统升级和 A/B 测试。本文将详细解释保存点的工作原理及其应用场景。 ... [详细]
  • 本文详细介绍了 Java 中 org.apache.qpid.server.model.VirtualHost 类的 closeAsync() 方法,提供了具体的代码示例和应用场景。通过这些示例,读者可以更好地理解和使用该方法。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • Struts与Spring框架的集成指南
    本文详细介绍了如何将Struts和Spring两个流行的Java Web开发框架进行整合,涵盖从环境配置到代码实现的具体步骤。 ... [详细]
author-avatar
快乐俱乐部老巢_260
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有