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);
        }
    
    }
相关推荐
stein_java16 分钟前
springMVC-10验证及国际化
java·spring
weixin_4786897619 分钟前
C++ 对 C 的兼容性
java·c语言·c++
LUCIAZZZ1 小时前
HikariCP数据库连接池原理解析
java·jvm·数据库·spring·springboot·线程池·连接池
sky_ph1 小时前
JAVA-GC浅析(二)G1(Garbage First)回收器
java·后端
IDRSolutions_CN2 小时前
PDF 转 HTML5 —— HTML5 填充图形不支持 Even-Odd 奇偶规则?(第二部分)
java·经验分享·pdf·软件工程·团队开发
hello早上好2 小时前
Spring不同类型的ApplicationContext的创建方式
java·后端·架构
HelloWord~3 小时前
SpringSecurity+vue通用权限系统2
java·vue.js
让我上个超影吧3 小时前
黑马点评【基于redis实现共享session登录】
java·redis
BillKu3 小时前
Java + Spring Boot + Mybatis 插入数据后,获取自增 id 的方法
java·tomcat·mybatis
全栈凯哥3 小时前
Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解
java·算法·leetcode·链表