当前使用版本(必填,否则不予处理)

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