Java中公共字段自动填充处理

目录

步骤1:编写填充字段的规则

步骤2:编写MPBaseEntity类实现Serializable,代码如下

步骤3:实体类继承MPBaseEntity

注意


        在Java项目中使用Mybatis-Plus时,对数据库中的公共字段进行填充处理。

步骤1:编写填充字段的规则

        编写填充字段的规则MyMetaObjectHandler类,需要继承自MetaObjectHandler,填充的规则有多种,下面提供我自己的(也是参考别人的写的)

package com.stu.framework.config.mybatitsPlus;

import com.stu.student.utils.DateFormatUtil;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.stu.common.utils.ShiroUtils;

import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.SystemMetaObject;

import java.util.Date;

/**
 * 自动填充的字段处理
 * 字段上方需要添加@TableField注解
 */
public class MyMetaObjectHandler implements MetaObjectHandler {
    /**
     * 创建时间
     */
    private static final String CREATE_TIME = "createTime";

    /**
     * 修改时间
     */
    private static final String UPDATE_TIME = "updateTime";

    /**
     * 创建人
     */
    private static final String CREATE_BY = "createBy";

    /**
     * 修改时间
     */
    private static final String UPDATE_BY = "updateBy";
    @Override
    public void insertFill(MetaObject metaObject) {
        String createTime = this.getTypeName(CREATE_TIME, metaObject);
        if (Date.class.getTypeName().equals(createTime)) {
            this.setFieldValByName(CREATE_TIME, new Date(), metaObject);
        } else if (String.class.getTypeName().equals(createTime)) {
            this.setFieldValByName(CREATE_TIME, DateFormatUtil.getDateNow(), metaObject);
        }

        String updateTime = this.getTypeName(UPDATE_TIME, metaObject);
        if (Date.class.getTypeName().equals(updateTime)) {
            this.setFieldValByName(UPDATE_TIME, new Date(), metaObject);
        } else if (String.class.getTypeName().equals(updateTime)) {
            this.setFieldValByName(UPDATE_TIME, DateFormatUtil.getDateNow(), metaObject);
        }

        String createBy = this.getTypeName(CREATE_BY, metaObject);
        if (String.class.getTypeName().equals(createBy)){
            this.setFieldValByName(CREATE_BY, ShiroUtils.getLoginName(), metaObject);
        }

        String updateBy = this.getTypeName(UPDATE_BY, metaObject);
        if (String.class.getTypeName().equals(updateBy)){
            this.setFieldValByName(UPDATE_BY, ShiroUtils.getLoginName(), metaObject);
        }
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        String updateTime = this.getTypeName(UPDATE_TIME, metaObject);
        if (Date.class.getTypeName().equals(updateTime)) {
            this.setFieldValByName(UPDATE_TIME, new Date(), metaObject);
        } else if (String.class.getTypeName().equals(updateTime)) {
            this.setFieldValByName(UPDATE_TIME, DateFormatUtil.getDateNow(), metaObject);
        }

        String updateBy = this.getTypeName(UPDATE_BY, metaObject);
        if (String.class.getTypeName().equals(updateBy)){
            this.setFieldValByName(UPDATE_BY, ShiroUtils.getLoginName(), metaObject);
        }
    }


    private String getTypeName(String fieldName, MetaObject metaObject) {
        if (metaObject.hasSetter(fieldName) && metaObject.hasGetter(fieldName)) {
            return metaObject.getGetterType(fieldName).getTypeName();
        } else if (metaObject.hasGetter(Constants.ENTITY)) {
            Object et = metaObject.getValue(Constants.ENTITY);
            if (et != null) {
                MetaObject etMeta = SystemMetaObject.forObject(et);
                if (etMeta.hasSetter(fieldName)) {
                    return etMeta.getGetterType(fieldName).getTypeName();
                }
            }
        }
        return "";
    }

}

步骤2:编写MPBaseEntity类实现Serializable,代码如下

package com.stu.common.core.domain;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;

import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * Entity基类
 * 
 * @author yanbei
 */
public class MPBaseEntity implements Serializable
{
    private static final long serialVersionUID = 1L;

    /** 搜索值 */
    @TableField(exist = false)
    private String searchValue;

    /** 创建者 */
    @TableField(fill = FieldFill.INSERT)
    private String createBy;

    /** 创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    /** 更新者 */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateBy;

    /** 更新时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

    /** 备注 */
    private String remark;

    /** 请求参数 */
    @TableField(exist = false)
    private Map<String, Object> params;

    public String getSearchValue()
    {
        return searchValue;
    }

    public void setSearchValue(String searchValue)
    {
        this.searchValue = searchValue;
    }

    public String getCreateBy()
    {
        return createBy;
    }

    public void setCreateBy(String createBy)
    {
        this.createBy = createBy;
    }

    public Date getCreateTime()
    {
        return createTime;
    }

    public void setCreateTime(Date createTime)
    {
        this.createTime = createTime;
    }

    public String getUpdateBy()
    {
        return updateBy;
    }

    public void setUpdateBy(String updateBy)
    {
        this.updateBy = updateBy;
    }

    public Date getUpdateTime()
    {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime)
    {
        this.updateTime = updateTime;
    }

    public String getRemark()
    {
        return remark;
    }

    public void setRemark(String remark)
    {
        this.remark = remark;
    }

    public Map<String, Object> getParams()
    {
        if (params == null)
        {
            params = new HashMap<>();
        }
        return params;
    }

    public void setParams(Map<String, Object> params)
    {
        this.params = params;
    }
}

步骤3:实体类继承MPBaseEntity

        例如:StudentUser extends MPBaseEntity

注意

         在使用的过程中要注意自己所需要的填充策略,我个人在MPBaseEntity类中将updateTime和updateBy填充策略设置为:新增和修改。即在执行插入的sql操作时,也会对这两个字段进行填充,若不要填充,可以改为@TableField(fill = FieldFill.UPDATE)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值