42 lines
1.3 KiB
Java
42 lines
1.3 KiB
Java
package com.rj.config;
|
||
|
||
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
|
||
import com.rj.tenant.TenantContextHolder;
|
||
import org.apache.ibatis.reflection.MetaObject;
|
||
import org.springframework.stereotype.Component;
|
||
|
||
/**
|
||
* MyBatis-Plus 公共字段自动填充处理器
|
||
*
|
||
* <p>
|
||
* 仅负责在插入时为带有 tenantId 字段的实体自动填充当前租户ID,<br/>
|
||
* 更新时不修改 tenantId,确保租户ID一旦写入不可被业务层随意修改。
|
||
* </p>
|
||
*/
|
||
@Component
|
||
public class MybatisPlusMetaObjectHandler implements MetaObjectHandler {
|
||
|
||
private static final String TENANT_FIELD = "tenantId";
|
||
|
||
@Override
|
||
public void insertFill(MetaObject metaObject) {
|
||
// 仅在实体中存在 tenantId 字段且当前值为空时进行填充
|
||
if (metaObject.hasSetter(TENANT_FIELD)) {
|
||
Object currentValue = getFieldValByName(TENANT_FIELD, metaObject);
|
||
if (currentValue == null) {
|
||
String tenantId = TenantContextHolder.getTenantId();
|
||
if (tenantId != null) {
|
||
this.strictInsertFill(metaObject, TENANT_FIELD, String.class, tenantId);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
@Override
|
||
public void updateFill(MetaObject metaObject) {
|
||
// 不自动更新 tenantId,保持租户ID稳定
|
||
}
|
||
}
|
||
|
||
|