技术之海一望无际, 记忆长流永无止境|

丿似锦

园龄:7年3个月粉丝:33关注:3

🎀Mybatis-Plus中的MetaObjectHandler

简介

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

通过insertFillupdateFill在新增/更新时进行自动填充
UserThreadLocalUtilThreadLocal,主要为存储当前线程的用户信息


结束

本文作者:丿似锦

本文链接:https://www.cnblogs.com/zktww/p/18377477

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   丿似锦  阅读(113)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起