多租户 
说明 
多租户就是类似多个子系统;多租户应该是数据绝对隔离的 
 多租户是围绕实体进行自动设置租户ID,通常在 from(实体类),join(实体类),delete(实体类),update(实体类) 
示例 
实体类 
java
@Data
@Table
public class SysUser {
    @TableId
    private Integer id;
    private String userName;
    private String password;
    
    private Integer roleId;
    private LocalDateTime createTime;
    @TenantId
    private Integer tenantId;
}Mapper 
继承 MybatisMapper 即可
java
public interface SysUserMapper extends MybatisMapper<SysUser> {
}设置租户ID 
java
TenantContext.registerTenantGetter(() -> {
    return 2;
});如果想临时关闭
java
TenantContext.registerTenantGetter(() -> {
     if(临时关闭){
         //返回null 即可
        return null;    
     }
     return 2;
});如何使用 
java
@Service
public class Test{
    @Autowired
    private SysUserMapper sysUserMapper;
    public void demo() {
        SysUser sysUser=new SysUser();
        sysUserMapper.save(sysUser);
    }
}save时 tenantId 字段会自动填充,update、delete自动会增加租户ID条件
前往@TenantId 查看
如何配置租户ID 
在项目启动时执行
TenantContext.registerTenantGetter(() -> {
    // 这里假设 租户ID是2
    return 2;
});如何支持多个租户ID 
多个租户ID 只支持查询类的
TenantContext.registerTenantGetter(() -> {
    return new TenantId(1, 2, 3);
});如何实现自己的动态ID(前面2个都是静态的租户ID) 
需要自己结合 ThreadLocal 技术 或者 已经有获取方法
创建 租户ID存取类 
public class TenantTLUtil {
    
    private static final ThreadLocal<Serializable> TL=new ThreadLocal<>();
    
    public static void set(Serializable tenantId){
        TL.set(tenantId);
    }
    
    public static Serializable get(){
        return TL.get();
    }
    
    public static void clear(){
        TL.remove();
    }
}动态存放租户ID 
拦截器 过滤器 AOP 等等 都可以
TenantTLUtil.set(1);
或者
TenantTLUtil.set(new TenantId(1, 2, 3));记得 需要自己调 TenantTLUtil.clear();
启动注入配置类 
@Configuration
public class MyXbatisGlobalConfig {
    @PostConstruct
    public void init() {
       TenantContext.registerTenantGetter(() -> {
            return TenantTLUtil.get();
       });  
    }
}这样就可以了
