MP自动填充字段

为什么要用自动填充字段呢?
因为多个表都有共同的字段,每次对他们进行操作时比较麻烦,也有重复代码,所以我们要用到自动填充字段。这东西类似于触发器,指定策略时,元数据对象处理器触发响应的方法。

用法如下

1.首先是在实体类中,使用@TableField注解指定自动生成的策略

  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;

2.编写元数据对象处理器,当事件发生时做什么操作

package com.hxut.common;

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;

/**
 * description: MyMetaObjectHandler 插入时,处理元数据的配置
 * date: 2022/6/24 10:27
 * author: MR.孙
 */
@SuppressWarnings("all")
@Component
@Slf4j
public class MyMetaObjectHandler implements MetaObjectHandler {
    /**
     * @description:  插入时,填充操作
     * @param metaObject
     * @return: void
     * @author: MR.孙
     * @date: 2022/6/24 10:32
    */
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("公共字段填充[insert]...");
        log.info(metaObject.toString());
        metaObject.setValue("createTime", LocalDateTime.now());
        metaObject.setValue("updateTime", LocalDateTime.now());
        metaObject.setValue("createUser", new Long(1));
        metaObject.setValue("updateUser", new Long(1));

    }
    /**
     * @description:  更新时,自动填充操作
     * @param metaObject
     * @return: void
     * @author: MR.孙
     * @date: 2022/6/24 10:32
    */
    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("公共字段填充[update]...");
        log.info(metaObject.toString());
        metaObject.setValue("updateTime", LocalDateTime.now());
        metaObject.setValue("updateUser", new Long(1));
    }
}

posted @ 2022-06-24 11:05  长情c  阅读(155)  评论(0)    收藏  举报