如何使用MyBatis-Plus实现字段的自动填充?(上篇)

1,119 阅读6分钟

👨‍🎓作者:bug菌
✏️博客:CSDN掘金infoQ51CTO
🎉简介:CSDN博客专家,C站历届博客之星Top50,掘金/InfoQ/51CTO等社区优质创作者,全网合计8w粉+,对一切技术感兴趣,重心偏Java方向;硬核公众号「 猿圈奇妙屋」,欢迎小伙伴们的加入,一起秃头,一起变强。
..
✍️温馨提醒:本文字数:1999字, 阅读完需:约 5 分钟

       嗨,家人们,我是bug菌呀,我又来啦。今天我们来聊点什么咧,OK,接着为大家更《springboot零基础入门教学》系列文章吧。希望能帮助更多的初学者们快速入门!

       小伙伴们在批阅文章的过程中如果觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章点亮👍吧,您的点赞三连(收藏⭐+关注👨‍🎓+留言📃)就是对bug菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻‍♀️,创作不停💕,加油☘️

一、前言🔥

环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE

二、背景🔥

        在日常开发中,特别是一些业务系统项目,共同发现一个规律,那就是对于诸多业务表中都包含有相同的字段,比如id主键、uuid、create_time、create_by、update_by、update_time等。而这些字段也是对于有些表而言是必要存在的。

       既然字段可以说是一模一样,那作为有代码洁癖的我,怎么可以忍受,每个实体都需要重复创建这些字段。我数了一下,业务规模最庞大最复杂的人员申报系统,拥有64张业务表,其中有32张表是含有以上全部字段属性的,为什么不封装??我不理解。

  • 第一每个实体中都有这些字段的身影,为何不封装?
  • 第二这些字段在常规的增删改中都是需要进行手动赋值,为何不抽离公共方法实现?

而今天我想做的事,就是把它们都剥离出来,改造!优雅永不过时。

  • 第一抽一个公共Entity出来。
  • 第二不需要人为手动为这些字段赋值。

三、实现思路🔥

思路1:

       采用aop进行自定义注解法。实现很简单,为添加了自定义注解切面赋值。我就不过多介绍,重点是看思路2,方便快捷。

思路2:

       采用mybatis-plus提供的@TableField 注解实现字段内容自动填充。

四、实现方案🔥

想必大家对mybatis-plus都不陌生吧,这里我就不过多介绍它了,我们直接步入正题。

第一步:引入mp依赖

<!--mybatis-plus-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.2.0</version>
</dependency>

第二步:实体类添加注解属性

       在你需要自动填充的字段加上注解。我这里是已经将众多表中共同字段抽离到了一个公共实体类中,而这也是解决我上方提出的第一步。而你也可以只加到你需要自动填充的字段上,加上该注解即可。后续也可以单独在某个字段上添加,因为一定要数据库自带这些字段才行,否则直接配置肯定是会映射不上而报错的。

@TableField(fill = FieldFill.INSERT)  //执行插入时自动填充

拓展:

如下是四中填充策略,你们具体根据业务进行选取。

public enum FieldFill {

    /**
     * 默认不处理
     */
    DEFAULT,

    /**
     * 插入填充字段
     */
    INSERT,

    /**
     * 更新填充字段
     */
    UPDATE,

    /**
     * 插入和更新填充字段
     */
    INSERT_UPDATE
}

        如下是完整添加。供大家参考:

package com.example.review.vo;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;

import java.util.Date;

/**
 * 公共属性实体类
 * 
 * @author luoYong
 * @create 2022年3月29日00:00:49
 */
@Data
public class BaseEntity {

    /**
     * id 生成策略为UUID
     */
    @TableId(type = IdType.UUID)
    private String id;

    /**
     * 创建者 填充策略为插入自动填充
     */
    @TableField(fill = FieldFill.INSERT)
    private String createBy;

    /**
     * 创建时间 填充策略为插入自动填充
     */
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    /**
     * 更新者 填充策略为插入和更新填充字段
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateBy;

    /**
     * 更新时间 填充策略为插入和更新填充字段
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
    
}

       ok,以上这样就好啦,具体实测的话,我会在下期重点讲解,不会一次性给大家灌输太多的知识点,保证能看完就立马吸收完。  

       下期文章入口:如何使用MyBatis-Plus实现字段的自动填充?(下篇)

... ...

       如果还想学习更多,你可以看看我的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬的。好啦,咱们下期见~

五、往期推荐🔥

文末🔥

       如果还想要学习更多,小伙伴们可关注bug菌专门为大家创建的专栏《springboot零基础入门教学》,从无到有,从零到一!希望能帮助到更多小伙伴们。

我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!

感谢认真读完我博客的铁子萌,在这里呢送给大家一句话,不管你是在职还是在读,绝对终身受用。
时刻警醒自己:
抱怨没有用,一切靠自己;
想要过更好的生活,那就要逼着自己变的更强,生活加油!!!