Browse Source

Merge pull request #3165 from zyzyzy523/3.0

left join 是子查询,并且子查询中带有入参,这个时候分页就不要移除这个join 不然预编译设置参数会报错
miemieYaho 4 years ago
parent
commit
a0177f9c7a

+ 5 - 0
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/PaginationInnerInterceptor.java

@@ -306,6 +306,11 @@ public class PaginationInnerInterceptor implements InnerInterceptor {
                         str = Optional.ofNullable(table.getAlias()).map(Alias::getName).orElse(table.getName()) + StringPool.DOT;
                         str = Optional.ofNullable(table.getAlias()).map(Alias::getName).orElse(table.getName()) + StringPool.DOT;
                     } else if (rightItem instanceof SubSelect) {
                     } else if (rightItem instanceof SubSelect) {
                         SubSelect subSelect = (SubSelect) rightItem;
                         SubSelect subSelect = (SubSelect) rightItem;
+                        /* 如果 left join 是子查询,并且子查询里包含 ?(代表有入参) 或者 where 条件里包含使用 join 的表的字段作条件,就不移除 join */
+                        if (subSelect.toString().contains(StringPool.QUESTION_MARK)) {
+                            canRemoveJoin = false;
+                            break;
+                        }
                         str = subSelect.getAlias().getName() + StringPool.DOT;
                         str = subSelect.getAlias().getName() + StringPool.DOT;
                     }
                     }
                     // 不区分大小写
                     // 不区分大小写