本文主要是介绍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
,主要为存储当前线程的用户信息
结束
这篇关于Mybatis-Plus中的MetaObjectHandler的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!