简介
MetaObjectHandler
是一个非常有用的组件,用于处理实体对象中的字段填充逻辑,比如自动填充创建时间、更新时间、创建人、修改人等字段。
组件介绍
MetaObjectHandler
接口允许在不修改业务代码的情况下,对实体类中的字段进行自动填充。这通常用于记录创建时间、更新时间、创建人、修改人等元数据信息。例如,在用户注册时自动设置创建时间,在更新用户信息时自动更新最后修改时间。
此处实现自动填充创建人、修改人
创建时间、修改时间等交给MySQL
进行自动填充
使用
- 实现
MetaObjectHandler
接口:
首先需要创建一个类实现MetaObjectHandler
接口,并重写其中的方法。
package com.zk.app.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.zk.app.utils.UserThreadLocalUtil;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
/**
* @program: ZK
* @description: 自定义mubatisplust填充
* @author: zk
* @create: 2024-07-17 11:30
**/
@Component
public class ZKMetaObjectHandler implements MetaObjectHandler {
/**
* 创建人字段
*/
private static final String CREATE_USER_ID = "createUserId";
/**
* 修改人字段
*/
private static final String UPDATE_USER_ID = "updateUserId";
@Override
public void insertFill(MetaObject metaObject) {
this.setUserId(metaObject, true);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setUserId(metaObject, false);
}
private void setUserId(MetaObject metaObject, boolean isInsert) {
Long userId = UserThreadLocalUtil.getUserId();
if (userId > 0) {
if (isInsert) {
this.setFieldValByName(CREATE_USER_ID, userId, metaObject);
}
this.setFieldValByName(UPDATE_USER_ID, userId, metaObject);
}
}
}
通过
insertFill
与updateFill
在新增/更新时进行自动填充
UserThreadLocalUtil
为ThreadLocal
,主要为存储当前线程的用户信息
结束
标签:metaObject,填充,userId,Plus,USER,MetaObjectHandler,Mybatis,MetaObject From: https://www.cnblogs.com/zktww/p/18377477