Mybatis Plus公共字段自动填充

在多张表中同时存在创建时间、创建人、修改时间、修改人等字段,这些基础字段属于公共字段,那能不能对于这些公共字段在某个地方统一进行处理,从而简化开发,针对这个场景,就可以采用Mybatis Plus提供的公共字段自动填充功能。

  1. 在实体类的属性上加入@TableField注解,并根据属性fill指定字段填充策略。其中填充策略有INSERT:插入时填充字段,UPDATE:更新时填充字段,INSERT_UPDATE:插入和更新时填充字段。
    1.

    java 复制代码
    package com.app.studypro.entity;
    
    import com.baomidou.mybatisplus.annotation.FieldFill;
    import com.baomidou.mybatisplus.annotation.TableField;
    import lombok.Data;
    
    import java.io.Serializable;
    import java.time.LocalDateTime;
    
    /**
     * 用户信息
     *
     * @author Administrator
     */
    @Data
    public class User implements Serializable {
    
        private static final long serialVersionUID = 1L;
        /**
         * 主键
         */
        private Long id;
    
        /**
         * 用户名
         */
        private String username;
    
        /**
         * 密码
         */
        private String password;
    
        /**
         * 性别
         */
        private String sex;
    
        /**
         * 状态 0:禁用,1:正常
         */
        private Integer status;
    
        /**
         * 创建时间
         */
        @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;
    
        /**
         * 是否删除
         */
        private Integer isDeleted;
    
    }
  2. 然后自定义元对象字段填充控制器,实现公共字段自动写入,实现的接口类为MetaObjectHandler,并在实现类上添加注解@Component,从而添加到spring容器中,并实现insertFill(插入元对象字段填充方法)和updateFill(更新元对象字段填充方法),从而在插入和更新的操作方法处在保存数据时将会将指定的字段进行自动填充,无需一个个编写代码进行设置处理。
    1.

    java 复制代码
    package com.app.studypro.common;
    
    import com.app.studypro.utils.UserUtil;
    import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
    import lombok.extern.slf4j.Slf4j;
    import org.apache.ibatis.reflection.MetaObject;
    import org.springframework.stereotype.Component;
    
    import java.time.LocalDateTime;
    
    /**
     * 自定义元对象字段填充控制器,实现公共字段自动写入
     *
     * @author Administrator
     */
    @Slf4j
    @Component
    public class CustomMetaObjectHandler implements MetaObjectHandler {
    
    
        /**
         * 插入元对象字段填充(用于插入时对公共字段的填充)
         *
         * @param metaObject 元对象
         */
        @Override
        public void insertFill(MetaObject metaObject) {
            log.info("插入时对公共字段的填充");
            LocalDateTime now = LocalDateTime.now();
            Long currentUserId = UserUtil.getCurrentUserId();
            metaObject.setValue("createTime", now);
            metaObject.setValue("updateTime", now);
            metaObject.setValue("createUser", currentUserId);
            metaObject.setValue("updateUser", currentUserId);
        }
    
        /**
         * 更新元对象字段填充(用于更新时对公共字段的填充)
         *
         * @param metaObject 元对象
         */
        @Override
        public void updateFill(MetaObject metaObject) {
            log.info("更新时对公共字段的填充");
            LocalDateTime now = LocalDateTime.now();
            Long currentUserId = UserUtil.getCurrentUserId();
            metaObject.setValue("updateTime", now);
            metaObject.setValue("updateUser", currentUserId);
        }
    
    }
相关推荐
Mr_Xuhhh7 分钟前
信号与槽的总结
java·开发语言·数据库·c++·qt·系统架构
纳兰青华17 分钟前
bean注入的过程中,Property of ‘java.util.ArrayList‘ type cannot be injected by ‘List‘
java·开发语言·spring·list
coding and coffee22 分钟前
狂神说 - Mybatis 学习笔记 --下
java·后端·mybatis
千楼27 分钟前
阿里巴巴Java开发手册(1.3.0)
java·代码规范
reiraoy41 分钟前
缓存解决方案
java
安之若素^1 小时前
启用不安全的HTTP方法
java·开发语言
ruanjiananquan991 小时前
c,c++语言的栈内存、堆内存及任意读写内存
java·c语言·c++
chuanauc1 小时前
Kubernets K8s 学习
java·学习·kubernetes
一头生产的驴2 小时前
java整合itext pdf实现自定义PDF文件格式导出
java·spring boot·pdf·itextpdf
YuTaoShao2 小时前
【LeetCode 热题 100】73. 矩阵置零——(解法二)空间复杂度 O(1)
java·算法·leetcode·矩阵