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

3.5.1

该问题是如何引起的?(确定最新版也有问题再提!!!)

3.3.2版本时提供, 使用了如下方式实现方法过滤 interceptor.setSqlParserFilter(new ISqlParserFilter() { @Override public boolean doFilter(MetaObject metaObject) { MappedStatement ms = SqlParserHelper.getMappedStatement(metaObject); String id = ms.getId(); if (id.contains("selectById")||id.contains("updateById")||id.contains("DeleteById")) { return true; } return false; } });

后续版本包括3.5.1 移除了setSqlParserFilter方法,没法追加租户隔离的过滤器

请教下现在如何实现上述需求呢

Comment From: VampireAchao

拦截忽略注解-interceptorignore 请问这个能否实现您的需求

Comment From: breaksilence

拦截忽略注解-interceptorignore 请问这个能否实现您的需求

InterceptorIgnore 这个注解我使用了, 但只能满足我自定义的sql处理,比如我想针对默认mybatisplus已存在的方法进行过滤是无法实现的, 比如在特定场景下如selectById,updateById等基础条件查询时 过滤租户的条件是无法实现的

Comment From: breaksilence

拦截忽略注解-interceptorignore 请问这个能否实现您的需求

根据当前版本的实现方式, 通过重载TenantLineInnerInterceptor的beforQuery好beforePrepare两个可扩展的方式实现了,谢谢,不过还是期望这个拦截器提供个过滤拦截器,实现可能更直观 ``` @Override public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException { //以下方法不进行租户拼接 String id = ms.getId(); if (id.contains("selectById") || id.contains("selectMaps")) { return ; } super.beforeQuery(executor, ms, parameter, rowBounds, resultHandler, boundSql); }

        @Override
        public void beforePrepare(StatementHandler sh, Connection connection, Integer transactionTimeout) {
            PluginUtils.MPStatementHandler mpSh = PluginUtils.mpStatementHandler(sh);
            MappedStatement ms = mpSh.mappedStatement();
            String id = ms.getId();
            //以下方法不进行租户拼接
            if (id.contains("updateById") || id.contains("deleteById")) {
                return ;
            }
            super.beforePrepare(sh, connection, transactionTimeout);
        }```