基于 MyBatis Plus 的多租户隔离模块。
<dependency>
<groupId>com.mdframe.forge</groupId>
<artifactId>forge-starter-tenant</artifactId>
</dependency>
forge:
tenant:
enabled: true
column: tenant_id
ignore-tables:
- sys_tenant
- sys_dict_type
public class TenantEntity {
private Long tenantId; // 租户 ID
// ...
}
// 业务实体继承
public class User extends TenantEntity {
private Long userId;
private String username;
// ...
}
// 设置当前租户
TenantContextHolder.setTenantId(1L);
// 获取当前租户
Long tenantId = TenantContextHolder.getTenantId();
// 清除租户上下文
TenantContextHolder.clear();
@IgnoreTenant
public List<User> listAllUsers() {
// 此查询不添加租户条件
return userMapper.selectList(null);
}
// 或使用 TenantUtil
public List<User> listAllUsers() {
return TenantUtil.ignore(() -> {
return userMapper.selectList(null);
});
}
// 设置租户 ID
TenantContextHolder.setTenantId(tenantId);
// 获取租户 ID
Long tenantId = TenantContextHolder.getTenantId();
// 判断是否已设置租户
boolean hasTenant = TenantContextHolder.hasTenant();
// 清除上下文
TenantContextHolder.clear();
// 在忽略租户隔离的上下文中执行
TenantUtil.ignore(() -> {
// 不添加租户条件的操作
});
// 在指定租户上下文中执行
TenantUtil.execute(tenantId, () -> {
// 使用指定租户 ID 的操作
});
tenant_id