千家信息网

Mybatis-Plus如何自动填充更新操作相关字段

发表于:2024-11-20 作者:千家信息网编辑
千家信息网最后更新 2024年11月20日,小编给大家分享一下Mybatis-Plus如何自动填充更新操作相关字段,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!场景介
千家信息网最后更新 2024年11月20日Mybatis-Plus如何自动填充更新操作相关字段

小编给大家分享一下Mybatis-Plus如何自动填充更新操作相关字段,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

场景介绍

在项目的数据表设计中,每张表都有create_id、create_time、update_id、update_time这四个字段,那么在Java应用中,针对新增和修改操作要对这四个字段进行相应的更改:

  • create_idupdate_id要自动填充为当前登录的用户ID

  • create_timeupdate_time要自动填充为当前时间

下面说说代码实现:

自动填充处理器

需要实现Mybatis-Plus中的MetaObjectHandler接口

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;import hw.topevery.basis.runtime.UserRuntime;import org.apache.ibatis.reflection.MetaObject;import org.springframework.stereotype.Component;import java.time.LocalDateTime;import java.util.Objects;/** * 更新相关字段处理器 * * @author whw * @date 2020/1/3 16:41 */@Componentpublic class UpdateRelatedFieldsMetaHandler implements MetaObjectHandler {    /**     * 新增操作     *     * @param metaObject     */    @Override    public void insertFill(MetaObject metaObject) {        this.strictInsertFill(metaObject, "createId", String.class, getCurrentUserId());        this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());        this.strictInsertFill(metaObject, "updateId", String.class, getCurrentUserId());        this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());    }    /**     * 更新操作     *     * @param metaObject     */    @Override    public void updateFill(MetaObject metaObject) {        this.strictUpdateFill(metaObject, "updateId", String.class, getCurrentUserId());        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());    }    /**     * 获取当前登录用户ID     *     * @return     */    private String getCurrentUserId() {        return "当前登录用户ID";    }}

Mybatis-Plus配置类

需要将处理器注入进Spring容器才会生效

import com.baomidou.mybatisplus.core.config.GlobalConfig;import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;import hw.topevery.kunming.wapi.handler.UpdateRelatedFieldsMetaHandler;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/** * Mybatis-Plus配置类 * * @author whw * @date 2020/1/3 16:41 */@Configurationpublic class MybatisPlusConfig {    @Bean    public GlobalConfig globalConfig() {        GlobalConfig globalConfig = new GlobalConfig();        globalConfig.setMetaObjectHandler(new UpdateRelatedFieldsMetaHandler());        return globalConfig;    }}

配置实体类中相关字段的自动填充策略

在@TableField注解中设置fill属性

字段填充策略FieldFill说明

描述
DEFAULT默认不处理
INSERT插入填充字段
UPDATE更新填充字段
INSERT_UPDATE插入和更新填充字段
import com.baomidou.mybatisplus.annotation.FieldFill;import com.baomidou.mybatisplus.annotation.TableField;import io.swagger.annotations.ApiModelProperty;import lombok.Data;import java.io.Serializable;import java.time.LocalDateTime;/** * 基础实体类 * * @author whw * @date 2020/1/3 17:37 */@Datapublic class BaseEntity implements Serializable {    private static final long serialVersionUID = 1L;    @ApiModelProperty(value = "创建用户ID")    @TableField(value = "c_create_id", fill = FieldFill.INSERT)    private String createId;    @ApiModelProperty(value = "创建时间")    @TableField(value = "c_create_time", fill = FieldFill.INSERT)    private LocalDateTime createTime;    @ApiModelProperty(value = "更新用户ID")    @TableField(value = "c_update_id", fill = FieldFill.INSERT_UPDATE)    private String updateId;    @ApiModelProperty(value = "更新时间")    @TableField(value = "c_update_time", fill = FieldFill.INSERT_UPDATE)    private LocalDateTime updateTime;}

以上是"Mybatis-Plus如何自动填充更新操作相关字段"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0