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";@Overridepublic void insertFill(MetaObject metaObject) {this.setUserId(metaObject, true);}@Overridepublic 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,主要为存储当前线程的用户信息
结束
