当前使用版本(必填,否则不予处理)
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);
}```