我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MybatisPlus如何实现公共字段自动赋值

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MybatisPlus如何实现公共字段自动赋值

这篇文章主要讲解了“MybatisPlus如何实现公共字段自动赋值”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MybatisPlus如何实现公共字段自动赋值”吧!

1 mybatis-plus实现自动填充指定字段

首先了解MetaObjectHandler MetaObjectHandler接口是mybatisPlus为我们提供的的一个扩展接口,我们可以利用这个接口在我们插入或者更新数据的时候,为一些字段指定默认值。Mybatis plus 为我们提供了一种一劳永逸的自动化赋值方式。

1.1 需要修改的字段在模型类上添加

@TableField(fill = FieldFill.xxx) 注解。

FieldFill的选项:

MybatisPlus如何实现公共字段自动赋值

哪个字段在什么时候填充需要手动设置注解

MybatisPlus如何实现公共字段自动赋值

1.2 新建一个MetaObjectHandler的实现类

MyMetaObjectHandler

package com.oldlu;import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;import org.apache.ibatis.reflection.MetaObject;import org.springframework.stereotype.Component;import java.util.Objects;@Component // 注入beanpublic class MyMetaObjectHandler implements MetaObjectHandler {    @Override  public void insertFill(MetaObject metaObject) {    // this.setFieldValByName(字段名, 内容, metaObject:用这个对象进行填充用的,称为元数据对象);    this.setFieldValByName("createBy", "admin", metaObject);    // ================setFieldValByName 方法内的内容,有兴趣可以进去看一看,中文注释的==================================================    /// **    // * 通用填充    // *    // * @param fieldName  java bean property name    // * @param fieldVal   java bean property value    // * @param metaObject meta object parameter    // */    // default MetaObjectHandler setFieldValByName(String fieldName, Object fieldVal, MetaObject    // metaObject) {    //  if (Objects.nonNull(fieldVal) && metaObject.hasSetter(fieldName)) {    //    metaObject.setValue(fieldName, fieldVal);    //  }    //  return this;    // }  }    @Override  public void updateFill(MetaObject metaObject) {    this.setFieldValByName("updateBy", "admin", metaObject);  }}

完成之后就可以使用了

**注意:**当你设置了逻辑删除,在逻辑删除的时候,是不会进行修改填充的,这个需要注意一下。

2 通用字段自动填充的最佳实践总结

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

  • 通常是为create_time赋值为系统的当前时间、update_time赋值为系统修改操作执行时的当前时间。

  • create_by(创建人)、update_by(修改人)赋值为当前的登录用户的用户名

xxxYyyZzz.setUpdateBy("oldlu");    //数据记录更新操作人xxxYyyZzz.setUpdateTime(new Date());   //数据记录更新操作的时间

2.1 调整数据库表结构

mysql数据库环境下的xxx_yyy_zzz表为例,在原有的表字段的基础上,添加下面的四个通用数据维护字段。

ALTER TABLE `xxx_yyy_zzz` ADD COLUMN `create_by` VARCHAR(64) NOT NULL COMMENT '本条记录创建人';ALTER TABLE `xxx_yyy_zzz` ADD COLUMN `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '本条记录创建时间';ALTER TABLE `xxx_yyy_zzz` ADD COLUMN `update_by` VARCHAR(64) NOT NULL COMMENT '本条记录修改人';ALTER TABLE `xxx_yyy_zzz` ADD COLUMN `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '本条记录的修改时间';

2.2 通用维护信息父类-自动赋值的字段

既然我们对某一张表的数据进行新增创建、修改信息的维护,我们的实体类也要做必要的调整。为了避免为每一个实体类都加上这四个成员变量,我们定义一个父类BaseColumns。

@Datapublic class BaseColumns {    @TableField(fill = FieldFill.INSERT   private String createBy;    @TableField(fill = FieldFill.INSERT)  private LocalDateTime  createTime;    @TableField(fill = FieldFill.INSERT_UPDATE,select = false)    private String updateBy;    @TableField(fill = FieldFill.INSERT_UPDATE,select = false)  private LocalDateTime updateTime;}
  • fill = FieldFill.INSERT表示insert操作的时候自动为该字段赋值

  • fill = FieldFill.INSERT_UPDATE表示nsert或update操作的时候自动为该字段赋值

  • select = false表示在使用Mybatis Wrapper条件构造器进行查询的时候,不查询这个属性对应的数据库字段。数据修改时间操作人通常对于运维更有意义,所以通常不需要展示在web页面上,所以通常select查询的时候不包含它。(这个内容与我们本机的字段自动填充没有太直接的联系,但是在实际应用中是有意义的)

2.3 实体类的实现

下文实体类XxxYyyZzz对应数据库中的xxx_yyy_zzz表,除了以上四个通用字段,xxx_yyy_zzz表还包含其他的业务字段。

@Data@EqualsAndHashCode(callSuper = true)public class XxxYyyZzz extends BaseColumns {    //其他的属性字段}

2.4 自动赋值的规则

@Componentpublic class MybastisColumnsHandler implements MetaObjectHandler {    @Resource    private JwtTokenUtil jwtTokenUtil;  //我的工具类,用于从Token令牌中获取登陆人信息    //设置数据新增时候的,字段自动赋值规则    @Override    public void insertFill(MetaObject metaObject) {      this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());      this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());      this.strictInsertFill(metaObject, "createBy", String.class, jwtTokenUtil.getUsernameFromToken());      this.strictUpdateFill(metaObject, "updateBy", String.class, jwtTokenUtil.getUsernameFromToken());    }    //设置数据修改update时候的,字段自动赋值规则    @Override    public void updateFill(MetaObject metaObject) {      this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());      this.strictUpdateFill(metaObject, "updateBy", String.class, jwtTokenUtil.getUsernameFromToken());    }}

在数据新增的时候,自动为createTime、updateTime、createBy、updateBy赋值,即数据初始化。

在数据修改的时候,自动为updateTime、updateBy赋值。

JwtTokenUtil是我写的一个工具类,从当前的登录用户JWT Token中获取当前登录用户的用户名。(你的系统里面获取当前登录用户名方法和我的不一样,但总之可以获取到)

2.5 实现效果

比如在进行数据更新的时候,下面的这两行代码就不需要写了,由updateFill(MetaObject metaObject)自动完成

//xxxYyyZzz.setUpdateBy("zimug");    //数据记录更新操作人//xxxYyyZzz.setUpdateTime(new Date());   //数据记录更新操作的时间xxxYyyZzzMapper.updateById(xxxYyyZzz);

同理,在数据insert操作的时候,insertFill(MetaObject metaObject)将被自动执行。

感谢各位的阅读,以上就是“MybatisPlus如何实现公共字段自动赋值”的内容了,经过本文的学习后,相信大家对MybatisPlus如何实现公共字段自动赋值这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MybatisPlus如何实现公共字段自动赋值

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MybatisPlus如何实现公共字段自动赋值

这篇文章主要讲解了“MybatisPlus如何实现公共字段自动赋值”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MybatisPlus如何实现公共字段自动赋值”吧!1 mybatis-plu
2023-07-02

SpringBootThreadLocal实现公共字段自动填充案例讲解

每一次在Controller层中封装改动数据的方法时都要重新设置一些共性字段,显得十分冗余。为了解决此问题也是在项目中第一次利用到线程,总的来说还是让我眼前一亮,也开阔了视野,对以后的开发具有深远的意义
2022-11-13

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

在开发中经常遇到多个实体类有共同的属性字段,这些字段属于公共字段,也就是很多表中都有这些字段,能不能对于这些公共字段在某个地方统一处理,来简化开发呢?MyBatis-Plus就提供了这一功能,本文就来为大家详细讲讲
2022-11-13

MybatisPlus字段类型转换如何实现

本文小编为大家详细介绍“MybatisPlus字段类型转换如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“MybatisPlus字段类型转换如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。resul
2023-07-05

php如何实现字段值相加

本篇内容介绍了“php如何实现字段值相加”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php实现字段值相加的的方法:1、使用array_co
2023-06-22

vue如何实现自定义公共组件及提取公共方法

这篇“vue如何实现自定义公共组件及提取公共方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue如何实现自定义公共组件及
2023-06-30

MyBatis-Plus如何实现字段自动填充功能

这篇文章给大家分享的是有关MyBatis-Plus如何实现字段自动填充功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、前言在项目中,我们有一些公共的字段需要做修改如:gmt_create:创建时间creat
2023-06-25

Python如何实现自动化办公

这篇文章主要介绍了Python如何实现自动化办公,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。背景想象一下,现在你有一份Word邀请函模板,然后你有一份客户列表,上面有客户的
2023-06-22

Laravel如何实现时间戳字段自动转换Carbon类

这篇文章将为大家详细讲解有关Laravel如何实现时间戳字段自动转换Carbon类,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。时间戳字段自动转换 Carbon 类最后一个技巧,但更像是一个提醒,因为您应
2023-06-27

如何实现Python办公自动化之Excel

本篇内容介绍了“如何实现Python办公自动化之Excel”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!准备使用 Python 操作 Exc
2023-06-16

JS如何实现自动打字机动效

这篇文章主要讲解了“JS如何实现自动打字机动效”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS如何实现自动打字机动效”吧!1、实现思路 首先这个需求的目的是实现自动打字机效果,意思就是文字
2023-07-05

php如何实现数字自动补零

今天小编给大家分享一下php如何实现数字自动补零的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、使用sprintf函数在p
2023-07-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录