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));
}
}