mybatisPlus公共字段自动填充
- 前言
- 实现步骤
- 实体类添加注解
- 按照框架要求编写元数据对象处理器,在此类中统一为公共字段赋值,此类需要实现MetaObjectHandler接口
- 1、在创建和更新的时候修改创建和更新的时候自动填充时间
- 2、如何获取到当前的id
- 测试结果
前言
mybatis plus 公共字段自动填充,也就是再插入或者更新的时候指定字段赋予指定的值,使用它的好处就是可以统一对这些字段进行处理,避免重复代码
实现步骤
1、在实体类的属性上加@TableField注解,指定自动填充的策略
2、按照框架要求编写元数据对象处理器,在此类中统一为公共字段赋值,此类需要实现MetaObjectHandler接口
实体类添加注解
创建和添加的时候自动更新
按照框架要求编写元数据对象处理器,在此类中统一为公共字段赋值,此类需要实现MetaObjectHandler接口
1、在创建和更新的时候修改创建和更新的时候自动填充时间
2、如何获取到当前的id
通过ThreadLocal来实现,通过存储到threadLocal中,使用的时候去其中去取
写公共方法
package com.example.ruiji_demo.common;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* @author jitwxs
* @date 2024年03月31日 21:58
*/
@Component
@Slf4j
public class BaseContext {
private static ThreadLocal<Long> threadLocal = new ThreadLocal<>();
public static void setCurrentId(Long id){
threadLocal.set(id);
}
public static Long getCurrentid(){
return threadLocal.get();
}
}
在过滤器中存储id
然后在字段填充的时候获取id
package com.example.ruiji_demo.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;
/**
*自定义元数据对象处理器
* @author jitwxs
* @date 2024年03月31日 21:44
*/
@Component
@Slf4j
public class MymetaObjecthandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject){
metaObject.setValue("createTime", LocalDateTime.now());
metaObject.setValue("updateTime", LocalDateTime.now());
metaObject.setValue("createUser", BaseContext.getCurrentid());
metaObject.setValue("updateUser", BaseContext.getCurrentid());
}
@Override
public void updateFill(MetaObject metaObject){
metaObject.setValue("updateTime", LocalDateTime.now());
metaObject.setValue("updateUser", BaseContext.getCurrentid());
}
}
测试结果
在修改状态的时候打印id