mybatis-plus公共字段自动填充&&&ThreadLocal保存线程局部变量

本文介绍了如何利用ThreadLocal实现线程局部变量,以存储并自动填充数据库表中的主键值。同时,展示了如何在MyBatis的MetaObjectHandler中应用ThreadLocal,确保公共字段如创建/更新时间及用户ID的线程安全填充。
摘要由CSDN通过智能技术生成

一、 公共字段自动填充

二 、 ThreadLocal

什么是threadlocal:
threadlocal 并不是一个线程,而是线程的局部变量,当多个类公用一个线程时,可以使用threadlocal进行参数传递(set/get。。Method)。threadlocal为每一个线程提供单独一份存储空间,具有线程隔离的效果,只有在线程内才能获取 到对应的值,线程外则不能访问。

实体类添加@TableField注解,标注该字段新增、插入时自动填充(填充条件)

在这里插入图片描述

ThreadLocal存取自动填充字段对应主键值得工具类

package com.wa.reggie.common;

/**
 * 基于ThreadLocal封装的工具类,用于保存和获取当前登录用户的ID
 * 线程安全,相当于以各自线程为作用域,独立保存各自的副本数据
 */

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

}


华丽的分割线


在这里插入图片描述


华丽的分割线


package com.wa.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
@Slf4j
public class MyMetaObjecthandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        System.out.println("公共字段自动填充【insert】");
        log.info(metaObject.toString());
        //为自动填充字段设置属性值
        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) {
        System.out.println("公共字段自动填充【update】");
        log.info(metaObject.toString());
        metaObject.setValue("updateTime", LocalDateTime.now());
        metaObject.setValue("updateUser",BaseContext.getCurrentId());
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值