Spring Boot 3 整合 MyBatis-Plus 实现多租户数据隔离
Alex Chen | 2026-08-26T22:59:44 | Java, Spring Boot
基于 MyBatis-Plus 的 TenantLineInnerInterceptor 插件,零侵入地实现 SaaS 多租户数据隔离方案。
# Spring Boot 3 整合 MyBatis-Plus 实现多租户数据隔离 ## 背景 在 SaaS 系统中,多租户数据隔离是核心需求。MyBatis-Plus 提供了开箱即用的多租户插件,可以在 SQL 层自动追加租户条件。 ## 核心配置 ```java @Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // 多租户插件(必须放在第一个) interceptor.addInnerInterceptor(new TenantLineInnerInterceptor( new TenantLineHandler() { @Override public Expression getTenantId() { // 从当前登录用户上下文获取租户 ID Long tenantId = SecurityContext.getCurrentTenantId(); return new LongValue(tenantId); } @Override public String getTenantIdColumn() { return "tenant_id"; } @Override public boolean ignoreTable(String tableName) { // 系统表不需要租户隔离 return "sys_config".equals(tableName); } } )); // 分页插件 interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); return interceptor; } } ``` ## 效果 配置后,所有 SQL 查询会自动追加 `WHERE tenant_id = ?`,INSERT 语句自动填充租户字段。开发者无需手动处理,真正做到零侵入。 ## 注意事项 1. 多租户插件必须在分页插件之前注册 2. 跨租户查询需要通过 `@InterceptorIgnore(tenantLine = "true")` 注解豁免 3. 联表查询时每张表都会追加租户条件