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 公共字段自动填充处理器 * *

* 仅负责在插入时为带有 tenantId 字段的实体自动填充当前租户ID,
* 更新时不修改 tenantId,确保租户ID一旦写入不可被业务层随意修改。 *

*/ @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稳定 } }