文章目录
公共字段的自动填充(Mybatis-plus 实现的技术)
一:概念
数据库中不同表中如果都有相同名称的字段,并且在java中每次赋值的方式一样,会造成代码重复,为了提高代码的复用性, Mybatis-plus 提供了实现这些重复字段自动填充的技术,我们只需写好代码,程序运行时自动帮助我们添加.
二:实现步骤:
1: 找到数据库表对应实体类需要自动填充的字段,在字段上添加@TableField注解,注解里需要添加fill属性,值根据增加还是修改进行选择.
//插入时自动填充
@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: 自定义一个类实现 Mybatis-plus提供的接口 MetaObjectHandler (处理数据库字段填充),重写insertFill 方法 (插入操作自动填充)和 updateFill (更新操作自动填充)两个方法,在方法中,用MetaObject 的对象调用setValue方法将自动填充的字段进行赋值
package com.itheima.reggie.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;
/**
* 添加和修改操作时将公共字段的数据进行自动填充
*/
@Component //处理器需要被spring管理 需要被发现
@Slf4j
public class MyMetaObjectHandler implements MetaObjectHandler {
/**
* 添加的时候将公共字段自动填充
* @param metaObject
*/
@Override
public void insertFill(MetaObject metaObject) {
log.info("添加的时候完成自动填充");
log.info("看一下metaObject:{}",metaObject);
//设置创建时间为当前时间
metaObject.setValue("createTime", LocalDateTime.now());
// 设置修改时间为当前时间
metaObject.setValue("updateTime", LocalDateTime.now());
// 设置创建人为当前登录用户的id
metaObject.setValue("createUser",BaseContext.getCurrentId() );
// 设置修改人为当前登录用户的id
metaObject.setValue("updateUser",BaseContext.getCurrentId() );
}
/**
* 修改的时候公共字段自动填充
* @param metaObject
*/
@Override
public void updateFill(MetaObject metaObject) {
log.info("更新时完成自动填充");
log.info("看一下metaObject:{}",metaObject);
// 设置修改时间为当前时间
metaObject.setValue("updateTime",LocalDateTime.now());
// 设置修改人为当前登录用户的id
metaObject.setValue("updateUser",BaseContext.getCurrentId());
}
}