异步线程的mybatisplus自动填充创建人
时间: 2023-12-21 12:32:11 浏览: 179
在Mybatis-Plus中,可以使用ThreadLocal来实现异步线程的自动填充创建人。ThreadLocal是一个线程局部变量,它为每个线程提供独立的变量副本,因此可以在异步线程中获取到当前登录用户的id。
下面是一个示例代码,演示了如何使用ThreadLocal来实现异步线程的Mybatis-Plus自动填充创建人:
```java
// 定义一个ThreadLocal变量,用于存储当前登录用户的id
private static ThreadLocal<Long> userIdThreadLocal = new ThreadLocal<>();
// 在登录时将当前用户的id存入ThreadLocal
public void login(Long userId) {
userIdThreadLocal.set(userId);
}
// 在注销时清除ThreadLocal中的数据
public void logout() {
userIdThreadLocal.remove();
}
// 自定义Mybatis-Plus的MetaObjectHandler
@Component
public class MyMetaObjectHandler extends MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
// 获取当前登录用户的id
Long userId = userIdThreadLocal.get();
if (userId != null) {
// 自动填充创建人字段
this.strictInsertFill(metaObject, "createUser", Long.class, userId);
}
}
@Override
public void updateFill(MetaObject metaObject) {
// 获取当前登录用户的id
Long userId = userIdThreadLocal.get();
if (userId != null) {
// 自动填充更新人字段
this.strictUpdateFill(metaObject, "updateUser", Long.class, userId);
}
}
}
```
在登录时,调用`login`方法将当前用户的id存入ThreadLocal中。在注销时,调用`logout`方法清除ThreadLocal中的数据。
然后,自定义一个继承自`MetaObjectHandler`的类,并将其注入为Spring的组件。在该类中,重写`insertFill`和`updateFill`方法,在这两个方法中获取ThreadLocal中存储的当前登录用户的id,并使用`strictInsertFill`和`strictUpdateFill`方法自动填充创建人和更新人字段。
这样,当进行插入或更新操作时,Mybatis-Plus会自动调用`insertFill`和`updateFill`方法,从ThreadLocal中获取当前登录用户的id,并自动填充到对应的字段中。
阅读全文