当前使用版本

3.4.0

该问题是如何引起的?

配置了拦截器,其中会根据用户的 id 新增一个 where 条件,现在有某些语句要不用使用这个 where 条件

看了文档,只有一个 @InterceptorIgnore 注解,放在方法上。因为大多数语句都是一些简单的语句,xml中也没有写\<resultMap>,所以想问一下有没有别的忽略拦截器的方法?

比如拦截器某个方法返回false就不用拦截器这种?

Comment From: miemieYaho

没有

Comment From: zhuzhenwen-github

/ * @ClassName BaseTenantLineInnerInterceptor * @Description 采用装饰模式,增强多租户拦截器({@link TenantLineInnerInterceptor}) * @Author zhuzhenwen * @Date 2020/11/24 2:52 下午 * @Version 1.0 / @Data @AllArgsConstructor public class BaseTenantLineInnerInterceptor implements InnerInterceptor {

//多租户拦截器
private TenantLineInnerInterceptor delegate;

@Override public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException { //获取当前要执行的查询方法名称 String sqlMethodName = ms.getId().substring(ms.getId().lastIndexOf(StringPool.DOT)+1); //判断当前方法是否为mp自带的内置方法 Optional first = Arrays.stream(SqlMethod.values()).filter(m -> m.getMethod().equals(sqlMethodName)).findFirst(); //说明是内置方法 if(first.isPresent()) { //自动拼接tenna_id delegate.beforeQuery(executor,ms,parameter,rowBounds,resultHandler,boundSql); }else{ return; }

}

@Override public void beforePrepare(StatementHandler sh, Connection connection, Integer transactionTimeout) { PluginUtils.MPStatementHandler mpSh = PluginUtils.mpStatementHandler(sh); MappedStatement ms = mpSh.mappedStatement(); String sqlMethodName = ms.getId().substring(ms.getId().lastIndexOf(StringPool.DOT)+1); Optional first = Arrays.stream(SqlMethod.values()).filter(m -> m.getMethod().equals(sqlMethodName)).findFirst(); //说明是内置方法 if(first.isPresent()) { delegate.beforePrepare(sh, connection, transactionTimeout); }else{ return; } } }