zoukankan      html  css  js  c++  java
  • 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);
            }
        }
    } 
    
  • 相关阅读:
    自旋锁和互斥锁区别
    NFS挂载Android文件系统
    查找文件命令
    make menuconfig出错解决方法
    专访Linux嵌入式开发韦东山操作系统图书作者--转
    Ubuntu进不入系统,一直停留在ubuntu图标画面(转)
    查看驱动打印信息
    aiku给你们最真心地学习建议--转
    SZ,RZ传送文件
    在Android下运行Linux平台编译的程序
  • 原文地址:https://www.cnblogs.com/kjgym/p/11637466.html
Copyright © 2011-2022 走看看