MybatisPlus开启多租户三步快速集成

张开发
2026/6/22 11:01:33 15 分钟阅读
MybatisPlus开启多租户三步快速集成
前言记录mybatisPlus集成多租户实现数据逻辑隔离步骤一yml添加配置标红字段名取决设置表的租户字段tenant: # 是否开启租户模式 enable: true # 需要排除的多租户的表 exclusionTable: - dp_im_user_friend # 租户字段名称 column:tenant_id步骤二import lombok.Getter; import lombok.Setter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; import java.util.List; /** * 白名单配置 */ Getter Setter Configuration ConfigurationProperties(prefix tenant) public class TenantProperties { /** * 是否开启租户模式 */ private Boolean enable; /** * 多租户字段名称 */ private String column; /** * 需要排除的多租户的表 */ private ListString exclusionTable; }注getTenantId()方法 从当前请求上下文中获取租户ID 这里简单返回固定值9527实际应从用户会话中获取package com.macro.mall.config.tenant; import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler; import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor; import com.macro.mall.config.MybatisPlusConfig; import lombok.RequiredArgsConstructor; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.NullValue; import net.sf.jsqlparser.expression.StringValue; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * 多租户配置中心 */ Configuration RequiredArgsConstructor(onConstructor_ Autowired) AutoConfigureBefore(MybatisPlusConfig.class) public class TenantConfig { private final TenantProperties tenantProperties; /** * 新多租户插件配置,一缓和二缓遵循mybatis的规则, * 需要设置 MybatisConfiguration#useDeprecatedExecutor false * 避免缓存万一出现问题 * * return TenantLineInnerInterceptor */ Bean public TenantLineInnerInterceptor tenantLineInnerInterceptor() { return new TenantLineInnerInterceptor(new TenantLineHandler() { /** * 获取租户ID * return Expression */ Override public Expression getTenantId() { //从请求获取登录用户的租户id String tenantId 9527; if (tenantId ! null) { return new StringValue(tenantId); } return new NullValue(); } /** * 获取多租户的字段名 * return String */ Override public String getTenantIdColumn() { return tenantProperties.getColumn(); } /** * 过滤不需要根据租户隔离的表 * 这是 default 方法,默认返回 false 表示所有表都需要拼多租户条件 * param tableName 表名 */ Override public boolean ignoreTable(String tableName) { return tenantProperties.getExclusionTable().stream().anyMatch( (t) - t.equalsIgnoreCase(tableName) ); } }); } }步骤三import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor; import com.macro.mall.config.tenant.TenantProperties; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * author luoyq * date 2025/3/14 22:15 * description: */ Configuration public class MybatisPlusConfig { Autowired private TenantLineInnerInterceptor tenantLineInnerInterceptor; Autowired private TenantProperties tenantProperties; /** * 添加分页插件 */ Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor new MybatisPlusInterceptor(); //多租户插件 if (tenantProperties.getEnable()) { interceptor.addInnerInterceptor(tenantLineInnerInterceptor); } interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 如果配置多个插件, 切记分页最后添加 // 这里添加 SQL 性能分析插件用来打印 SQL 和执行时间 // 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbType return interceptor; } }验证结果调用方法查看打印sql是否携带租户字段完结撒花

更多文章