确认
- [X] 我的版本是最新版本, 我的版本号与 version 相同, 并且项目里无依赖冲突
- [X] 我已经在 issue 中搜索过, 确认问题没有被提出过
- [X] 我已经修改标题, 将标题中的 描述 替换为遇到的问题
当前程序版本
3.5.6
问题描述
问题描述:返回null时会重复拼接Where语句 代码: ` public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//数据权限插件
DataPermissionInterceptor dataPermissionInterceptor = new DataPermissionInterceptor();
dataPermissionInterceptor.setDataPermissionHandler(new MyDataPermissionInterceptor());
interceptor.addInnerInterceptor(dataPermissionInterceptor);
//分页
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
//乐观锁
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return interceptor;
}`
` @Override public Expression getSqlSegment(Table table, Expression where, String mappedStatementId) {
String methodName = StringUtils.substringAfterLast(mappedStatementId, Strings.DOT);
try {
Class<?> clazz = Class.forName(mappedStatementId.substring(0, mappedStatementId.lastIndexOf(".")));
Method[] methods = clazz.getDeclaredMethods();
if (!shouldFilter(methodName, methods)) {
return where;
}
Method method = clazz.getDeclaredMethod(methodName);
//注解
DataPermission dataPermission = method.getAnnotation(DataPermission.class);
log.info("数据权限过滤 Method -> {}", mappedStatementId);
return dataPermissionSql(table, where, dataPermission);
} catch (Exception e) {
log.error("数据权限过滤异常,{}", e.getMessage());
}
return null;
}`
详细堆栈日志
日志:
2024-07-21 11:33:25 @artifactId@ INFO QuartzScheduler_FEBS_NEXT_SCHEDULE-lizhanlngdeiMac1721532778135_MisfireHandler p6spy
deleted = 1 AND (username = ?)
2024-07-21 11:33:28 @artifactId@ INFO http-nio-8081-exec-3 p6spy 2024-07-21 11:33:28 | 耗时 3 ms | SQL 语句:
SELECT id, user_id, dept_id, dept_ids, username, password, nickname, user_real_name, email, phone, user_sex, user_avatar AS avatar, remark, dept_level, web_setting, status, last_login_time, deleted, create_id, create_time, update_id, update_time, version FROM t_user WHERE deleted = 1 AND (username = 'system') AND deleted = 1 AND (username = NULL);
其中它会重复拼接
WHERE deleted = 1 AND (username = 'system') AND deleted = 1 AND (username = NULL);
Comment From: RuningFastChack
已经解决,不用拦截的一定要返回null,而不是where