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);
        }
    
    }
相关推荐
·薯条大王4 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
ZJH__GO7 小时前
网络编程v4pro--实现聊天室文件传输功能
java·服务器·网络·计算机网络
程序员黑豆7 小时前
Windows 系统 Java 环境变量配置全攻略:解决“不是内部或外部命令”
java·前端·ai编程
命运之光8 小时前
【C语言完整代码】就诊信息管理系统
java·c语言·开发语言
凤山老林8 小时前
Spring Boot @Async 线上实战:从默认配置到生产级线程池治理
java·spring boot·后端
marvelyu9 小时前
每天10分钟学会OceanBase系列(Day 20):跨机房容灾实战——构建多数据中心高可用架构
java·大数据·数据库
AI人工智能+电脑小能手10 小时前
大白话说Java设计模式-04-工厂方法模式(业务实战篇)
java·设计模式·工厂方法模式·架构设计·代码解耦
BUG指挥官10 小时前
Sa-Token和Spring Security对比
java·后端·spring
小当家.10510 小时前
深入理解 ReAct Agent:从原理到 Java 实战
java·react.js·agent·react·架构设计·agent设计
geminigoth10 小时前
Spring AI Alibaba 入门开发一(备份)
java·人工智能·spring