package com.muyu.config.tenant; import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler; import com.muyu.system.handle.SystemHandler; import com.muyu.web.utils.Convert; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.StringValue; import org.springframework.stereotype.Component; import java.util.HashSet; import java.util.Set; @Component public class CustomTenantHandler implements TenantLineHandler { private static final ThreadLocal ignoreTableThreadLocal = new ThreadLocal<>(); public void ignore(){ ignoreTableThreadLocal.set(true); } public void remove(){ ignoreTableThreadLocal.remove(); } private static final Set ignoreTableSet = new HashSet(){{ add("user_info"); }}; @Override public Expression getTenantId() { // 假设有一个租户上下文,能够从中获取当前用户的租户 String tenantId = SystemHandler.getTenantId(); // 返回租户ID的表达式,LongValue 是 JSQLParser 中表示 bigint 类型的 class return new StringValue(tenantId); } @Override public String getTenantIdColumn() { return "tenant_id"; } @Override public boolean ignoreTable(String tableName) { // 根据需要返回是否忽略该表 return Convert.toBool(ignoreTableThreadLocal.get(), Boolean.FALSE) || ignoreTableSet.contains(tableName); } }