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);
        }
    
    }
相关推荐
xlsw_3 小时前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
神仙别闹4 小时前
基于java的改良版超级玛丽小游戏
java
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭4 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
暮湫5 小时前
泛型(2)
java
超爱吃士力架5 小时前
邀请逻辑
java·linux·后端
南宫生5 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
转码的小石5 小时前
12/21java基础
java
李小白665 小时前
Spring MVC(上)
java·spring·mvc
GoodStudyAndDayDayUp5 小时前
IDEA能够从mapper跳转到xml的插件
xml·java·intellij-idea
装不满的克莱因瓶6 小时前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb