簡介
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);
}
}
}
透過
insertFill
與updateFill
在新增/更新時進行自動填充
UserThreadLocalUtil
為ThreadLocal
,主要為儲存當前執行緒的使用者資訊
結束