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);
            }
        }
    } 
    
  • 相关阅读:
    c#读取文件内容存放到int数组 array.txt
    YxShop_V4.2.0开源免费商城2009新春版发布,整合dz最新版,开源!
    c# 读取xml文件 "分析 EntityName 时出错"的解决方案
    正则表达式口诀
    c#操作xml文件
    在WebClient类中保持Session
    实测SCSI RAID速度
    朋友送我的一套书
    给LFF占了个板凳
    ECC内存也能坏
  • 原文地址:https://www.cnblogs.com/kjgym/p/11637466.html
Copyright © 2011-2022 走看看