MyBatis-Plus中公共字段的统一处理的实现

 更新时间:2023年08月23日 08:38:08   作者:秋天code  
在开发中经常遇到多个实体类有共同的属性字段,这些字段属于公共字段,本文主要介绍了MyBatis-Plus中公共字段的统一处理的实现,具有一定的参考价值,感兴趣的可以了解一下

数据库中一些表的公共字段,例如修改时间、修改人、创建时间、创建人,我们一般都是这样来处理的:

employee.setCreateTime(LocalDateTime.now());
employee.setUpdateTime(LocalDateTime.now());
employee.setCreateUser(UserHolder.get());
employee.setUpdateUser(UserHolder.get()); // UserHolder是自己封装的工具类,用来获取当前系统用户

在对每个表记录进行修改时,这四行代码都要重复出现,甚是繁琐,因此MyBatis-Plus中提供了对这些公共字段处理的简化手段。
大概就是两个步骤:

在实体类的属性上,使用@TableField中的fill属性设定此字段的填充策略

@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
@TableField(fill = FieldFill.INSERT)
private Long createUser;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateUser;

@TableField中的fill属性值是一个枚举类,代表此字段的填充策略,这个枚举类有四个值:

  • FieldFill.DEFAULT,默认策略,即不填充
  • FieldFill.INSERT,插入时进行填充
  • FielFill.UPDATE,更新时进行填充
  • FieldFill.INSERT_UPDATE,在插入和更新时进行填充

实现MetaObjectHandler接口,自定义填充逻辑

//自定义元数据对象处理器
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    //插入操作时自动填充的逻辑
    @Override
    public void insertFill(MetaObject metaObject) {
        metaObject.setValue("createTime", LocalDateTime.now());
        metaObject.setValue("updateTime", LocalDateTime.now());
        Long id = UserHolder.get();
        if (id != null) {
            metaObject.setValue("createUser", id);
            metaObject.setValue("updateUser", id);
        }
    }
    //更新操作时自动填充的逻辑
    @Override
    public void updateFill(MetaObject metaObject) {
        metaObject.setValue("updateTime", LocalDateTime.now());
        Long id = UserHolder.get();
        if (id != null) {
            metaObject.setValue("updateUser", id);
        }
    }
}

这个MetaObjectHandler接口有两个抽象方法,分别代表在INSERT和UPDATE时的填充逻辑。
接下来,在业务逻辑中,就不需要对这些公共字段做处理了,只要处理核心的业务字段就可以了。

到此这篇关于MyBatis-Plus中公共字段的统一处理的实现的文章就介绍到这了,更多相关MyBatis-Plus公共字段统一处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java多线程环境下使用的集合类示例详解

    Java多线程环境下使用的集合类示例详解

    这篇文章主要给大家介绍了关于Java多线程环境下使用的集合类的相关资料,开发过程中经常遇到这种需求,文中通过代码示例和图文介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • 浅谈Java 对于继承的初级理解

    浅谈Java 对于继承的初级理解

    下面小编就为大家带来一篇浅谈Java 对于继承的初级理解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • JAVA编程实现TCP网络通讯的方法示例

    JAVA编程实现TCP网络通讯的方法示例

    这篇文章主要介绍了JAVA编程实现TCP网络通讯的方法,简单说明了TCP通讯的原理并结合具体实例形式分析了java实现TCP通讯的步骤与相关操作技巧,需要的朋友可以参考下
    2017-08-08
  • java高并发的用户线程和守护线程详解

    java高并发的用户线程和守护线程详解

    本篇文章主要介绍了浅谈java中守护线程与用户线程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-10-10
  • Springboot集成阿里云OSS上传文件系统教程

    Springboot集成阿里云OSS上传文件系统教程

    这篇文章主要介绍了Springboot集成阿里云OSS上传文件系统教程,通过详细的图文展示,代码步骤的展示和文件配置信息,希望对你有所帮助
    2021-06-06
  • 深入理解java中的重载和覆盖

    深入理解java中的重载和覆盖

    下面小编就为大家带来一篇深入理解java中的重载和覆盖。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • maven项目install时忽略执行test方法的总结

    maven项目install时忽略执行test方法的总结

    这篇文章主要介绍了maven项目install时忽略执行test方法的总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • java正则表达式的应用 java读取文件并获取电话号码

    java正则表达式的应用 java读取文件并获取电话号码

    这篇文章主要介绍了java正则表达式的应用,应用的内容是java读取文件并获取电话号码,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • Java面试题 从源码角度分析HashSet实现原理

    Java面试题 从源码角度分析HashSet实现原理

    这篇文章主要介绍了Java面试题 从源码角度分析HashSet实现原理?,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • 解决java执行cmd命令调用ffmpeg报错Concat error - No such filter ''[0,0]''问题

    解决java执行cmd命令调用ffmpeg报错Concat error - No such filter ''[0,0]

    这篇文章主要介绍了java执行cmd命令,调用ffmpeg报错Concat error - No such filter '[0,0]'解决方法,本文通过截图实例代码说明给大家介绍的非常详细,对大家的工作或学习有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03

最新评论