当前使用版本(必填,否则不予处理)
3.4.0
该问题是如何引起的?(确定最新版也有问题再提!!!)
多租户 一张表 某一个查询不需要设置租户 有办法过滤掉么
重现步骤(如果有就写完整)
比如下面代码 配置了 "resource", "resource_group", "ram_user" 几张表, 想 让 resource 表里的某一个方法 不使用 tenant_code 条件 不加 租户查询
/**
* 新多租户插件配置,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存万一出现问题
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new TenantLineHandler() {
@Override
public Expression getTenantId() {
String tenantCode = SecurityContextUtil.getTenantCode();
if (StringUtils.isEmpty(tenantCode)) {
throw new TenantClientException(TenantClientErrorCode.NULL_TENANT_CODE);
}
return new StringValue(tenantCode);
}
// 这是 default 方法,默认返回 false 表示所有表都需要拼多租户条件
@Override
public boolean ignoreTable(String tableName) {
List<String> resource = Arrays.asList("resource", "resource_group", "ram_user");
boolean b = resource.contains(tableName);
return !b;
}
@Override
public String getTenantIdColumn() {
return "tenant_code";
}
}));
ISqlParserFilter iSqlParserFilter = new ISqlParserFilter() {
@Override
public boolean doFilter(MetaObject metaObject) {
return false;
}
};
// 如果用了分页插件注意先 add TenantLineInnerInterceptor 再 add PaginationInnerInterceptor
// 用了分页插件必须设置 MybatisConfiguration#useDeprecatedExecutor = false
// interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
报错信息
Comment From: miemieYaho
那你需要新写一个mapper.method 并且加上新提供的注解让这个method不走该插件,如果sql里个别表需要租户过滤则需要你自己进行操作
Comment From: purgeyao
mapper.method 加哪个注解 @miemieYaho
Comment From: miemieYaho
InterceptorIgnore
Comment From: purgeyao
@InterceptorIgnore 需要如何使用, 已经在MybatisPlusInterceptor设置下面代码
如何去除 ram_user 表里的个别方法不加 tenant_code 字段
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new TenantLineHandler() {
@Override
public Expression getTenantId() {
String tenantCode = SecurityContextUtil.getTenantCode();
if (StringUtils.isEmpty(tenantCode)) {
throw new TenantClientException(TenantClientErrorCode.NULL_TENANT_CODE);
}
return new StringValue(tenantCode);
}
// 这是 default 方法,默认返回 false 表示所有表都需要拼多租户条件
@Override
public boolean ignoreTable(String tableName) {
List<String> resource = Arrays.asList("resource", "resource_group", "ram_user");
boolean b = resource.contains(tableName);
return !b;
}
@Override
public String getTenantIdColumn() {
return "tenant_code";
}
}));
// 如果用了分页插件注意先 add TenantLineInnerInterceptor 再 add PaginationInnerInterceptor
// 用了分页插件必须设置 MybatisConfiguration#useDeprecatedExecutor = false
// interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
@miemieYaho
Comment From: miemieYaho
加在你新写的mapper.method上,标明不走租户插件,租户条件你就放入参里自己拼
Comment From: purgeyao
加在你新写的mapper.method上,标明不走租户插件,租户条件你就放入参里自己拼
是 感觉麻烦了 正常情况我们是在 UserRepositoryImpl 里面写的方法 调用了 ServiceImpl 的公有方法 是你们写的公有的 没有办法加 想让 UserRepositoryImpl 层级的某个 方法不走租户插件
@miemieYaho