第一步给公共字段上加上注解@TableField(fill=FieldFill.)
@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;
第二步编写MetaObject工具类
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
@Slf4j
public class MyMetaObject implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
metaObject.setValue("createTime", LocalDateTime.now());
metaObject.setValue("updateTime", LocalDateTime.now());
metaObject.setValue("createUser", new Long(1));
metaObject.setValue("updateUser", new Long(1));
}
@Override
public void updateFill(MetaObject metaObject) {
metaObject.setValue("updateTime", LocalDateTime.now());
metaObject.setValue("updateUser", new Long(1));
}
}
存在问题:修改人的id存在session中,在当前类中获取不到
解决问题:考虑到是一个线程,可以把id存储到当前线程中
public class BaseContext {
private static ThreadLocal<Long> threadLocal=new ThreadLocal();
public static void setThreadId(Long id){
threadLocal.set(id);
}
public static Long getThreadId(){
return threadLocal.get();
}
}
修改后
public class MyBetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
metaObject.setValue("updateTime", LocalDateTime.now());
metaObject.setValue("createTime", LocalDateTime.now());
metaObject.setValue("createUser", BaseContext.getThreadId());
metaObject.setValue("updateUser", BaseContext.getThreadId());
}
@Override
public void updateFill(MetaObject metaObject) {
metaObject.setValue("updateTime", LocalDateTime.now());
metaObject.setValue("updateUser", BaseContext.getThreadId());
}
}