mybatis mysql 多租户_MybatisPlus的多租户插件使用!

核心插件: TenantLineInnerInterceptor

核心处理器:TenantLineHandler

public interface TenantLineHandler {

/**

* 获取租户 ID 值表达式,只支持单个 ID 值

*

*

* @return 租户 ID 值表达式

*/

Expression getTenantId();

/**

* 获取租户字段名

*

* 默认字段名叫: tenant_id

*

* @return 租户字段名

*/

default String getTenantIdColumn() {

return "tenant_id";

}

/**

* 根据表名判断是否忽略拼接多租户条件

*

* 默认都要进行解析并拼接多租户条件

*

* @param tableName 表名

* @return 是否忽略,true:表示忽略,false:需要解析并拼接多租户条件

*/

default boolean ignoreTable(String tableName) {

return false;

}

}

说明:

多租户 != 权限过滤,不要乱用,租户之间是完全隔离的!!!

启用多租户后所有执行的method的sql都会进行处理.

自写的sql请按规范书写(sql涉及到多个表的每个表都要给别名,特别是 inner join 的要写标准的 inner join)

@Bean

public MybatisPlusInterceptor mybatisPlusInterceptor() {

MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

// 如果用了分页插件注意先 add TenantLineInnerInterceptor 再 add PaginationInnerInterceptor

// 用了分页插件必须设置 MybatisConfiguration#useDeprecatedExecutor = false

// interceptor.addInnerInterceptor(new PaginationInnerInterceptor());

interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(

new TenantLineHandler() {

// manager_id = 1088248166370832385

// 获取租户 ID 值表达式,只支持单个 ID 值

@Override

public Expression getTenantId() {

return new LongValue(1088248166370832385L);

}

// 这是 default 方法,默认返回 false 表示所有表都需要拼多租户条件,// 这里设置 role表不需要该条件

@Override

public boolean ignoreTable(String tableName) {

if ("role".equals(tableName)) {

return true;

}

return false;

}

@Override

public String getTenantIdColumn() {

return "manager_id";

}

}));

interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MysqL));

return interceptor;

}

@Bean

public ConfigurationCustomizer configurationCustomizer() {

return configuration -> configuration.setUseDeprecatedExecutor(false);

}

测试

@RunWith(SpringRunner.class)

@SpringBootTest

class TenantTest {

@Resource

UserMapper userMapper;

@Test

void select(){

// manager_id = 1088248166370832385

List users = userMapper.selectList(null);

users.forEach(System.out::println);

}

}

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

你可能感兴趣的:(mybatis,mysql,多租户)