# 多租户模块
基于 MyBatis Plus 的多租户隔离模块。
## 引入依赖
```xml
com.mdframe.forge
forge-starter-tenant
```
## 配置
```yaml
forge:
tenant:
enabled: true
column: tenant_id
ignore-tables:
- sys_tenant
- sys_dict_type
```
## 使用示例
### 租户实体基类
```java
public class TenantEntity {
private Long tenantId; // 租户 ID
// ...
}
// 业务实体继承
public class User extends TenantEntity {
private Long userId;
private String username;
// ...
}
```
### 租户上下文
```java
// 设置当前租户
TenantContextHolder.setTenantId(1L);
// 获取当前租户
Long tenantId = TenantContextHolder.getTenantId();
// 清除租户上下文
TenantContextHolder.clear();
```
### 忽略租户隔离
```java
@IgnoreTenant
public List listAllUsers() {
// 此查询不添加租户条件
return userMapper.selectList(null);
}
// 或使用 TenantUtil
public List listAllUsers() {
return TenantUtil.ignore(() -> {
return userMapper.selectList(null);
});
}
```
## API 参考
### TenantContextHolder
```java
// 设置租户 ID
TenantContextHolder.setTenantId(tenantId);
// 获取租户 ID
Long tenantId = TenantContextHolder.getTenantId();
// 判断是否已设置租户
boolean hasTenant = TenantContextHolder.hasTenant();
// 清除上下文
TenantContextHolder.clear();
```
### TenantUtil
```java
// 在忽略租户隔离的上下文中执行
TenantUtil.ignore(() -> {
// 不添加租户条件的操作
});
// 在指定租户上下文中执行
TenantUtil.execute(tenantId, () -> {
// 使用指定租户 ID 的操作
});
```
## 注意事项
1. 租户字段默认为 `tenant_id`
2. 需要在请求拦截器中设置租户上下文
3. 忽略租户隔离的操作需谨慎使用
4. 建议所有业务表都添加租户字段