• Mybatis-Plus 的自动填充


    MP的自动填充

    背景:

    有的项目有“新增时间”、“修改时间”、“操作人”等字段,

    比较笨的一个方法就是新增时new Date,修改时new Date。(或者是Java8的LocalDataTime.now())

    或者:

    在数据库中设置默认值。

    自动填充实现

    1 在实体类中属性上添加注解@TableFied(fill=Field.INSERT)

    在MP中,此处fill的属性是有如下选择:

    public enum FieldFill {
        /**
         * 默认不处理
         */
        DEFAULT,
        /**
         * 插入时填充字段
         */
        INSERT,
        /**
         * 更新时填充字段
         */
        UPDATE,
        /**
         * 插入和更新时填充字段
         */
        INSERT_UPDATE
    }
    

    2 添加一个填充处理器,需要实现接口MetaObjectHandler

    @Component
    public class MyMetaObjectHandler implements MetaObjectHandler {
        
        @Override
        public void insertFill(MetaObject metaObect) {
            setInsertFieldValByName("gmtCreate", LocalDataTime.now(), metaObject);
        }
        
         @Override
        public void updateFill(MetaObject metaObect) {
            setUpdateFieldValByName("gmtCreate", LocalDataTime.now(), metaObject);
        }
    } 
    

    也可以在不同的ff中使用通用的方法setFieldValByName(fieldName, fieldVal, metaObject)

    以上两步之后,在添加和修改数据时,MP会自动帮我们维护两个时间

    3 对自动填充的优化

    @Component
    public class MyMetaObjectHandler implements MetaObjectHandler {
        
        @Override
        public void insertFill(MetaObject metaObect) {
            // 看实体类中是否有这个属性,有的话就执行。没有就不执行
            boolean hasSetter = metaObject.hasSetter("gmtCreate");
            if (hasSetter) {
                setInsertFieldValByName("gmtCreate", LocalDataTime.now(), metaObject);
            }
        }
        
         @Override
        public void updateFill(MetaObject metaObect) {
            // 如果预先自己设置了值,则设置不使用MP的自动填充
            Object val = getFieldValByName("gmtModified", metaObject);
            if (val == null) {
           		setUpdateFieldValByName("gmtModified", LocalDataTime.now(), metaObject);
            }
        }
    } 
    
  • 相关阅读:
    docker入门——centos安装
    NET应用——你的数据安全有必要升级
    mysql事件机制——定时任务
    是时候升级你的Js工具了-分页【基于JQ】
    优美库图片系统
    爬虫之蜂鸟网图片爬取
    壁纸提取
    CSDN刷阅读数
    tkinter基础-输入框、文本框
    数据结构与算法之选择排序
  • 原文地址:https://www.cnblogs.com/kjgym/p/11637466.html
Copyright © 2020-2023  润新知