浏览代码

调整#6719代码.

https://github.com/baomidou/mybatis-plus/issues/6687
nieqiurong 1 月之前
父节点
当前提交
c0de7a4a0d

+ 7 - 4
mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser-4.9/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/BaseMultiTableInnerInterceptor.java

@@ -17,6 +17,7 @@ package com.baomidou.mybatisplus.extension.plugins.inner;
 
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.parser.JsqlParserSupport;
+import com.baomidou.mybatisplus.jsqlparser.enums.ExpressionAppendMode;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
@@ -48,9 +49,11 @@ import java.util.stream.Collectors;
 public abstract class BaseMultiTableInnerInterceptor extends JsqlParserSupport implements InnerInterceptor {
 
     /**
-     * 条件表达式追加模式:true表示是后面追加(条件放最后),false表示插入到第一个位置(条件放第一个)
+     * 条件表达式追加模式 (默认放置最后,仅作用于update,delete,select)
+     *
+     * @since 3.5.11
      */
-    private boolean expressionAppendMode = true;
+    private ExpressionAppendMode expressionAppendMode = ExpressionAppendMode.LAST;
 
     protected void processSelectBody(Select selectBody, final String whereSegment) {
         if (selectBody == null) {
@@ -95,15 +98,15 @@ public abstract class BaseMultiTableInnerInterceptor extends JsqlParserSupport i
      * @param currentExpression 原sql的条件表达式
      * @param injectExpression  注入的表达式
      * @return 追加了条件的完整表达式(where条件 / on条件)
+     * @since 3.5.11
      */
     protected Expression appendExpression(Expression currentExpression, Expression injectExpression) {
-        if (expressionAppendMode) {
+        if (ExpressionAppendMode.LAST == expressionAppendMode || expressionAppendMode == null) {
             return new AndExpression(currentExpression, injectExpression);
         } else {
             return new AndExpression(injectExpression, currentExpression);
         }
     }
-
     /**
      * 处理 PlainSelect
      */

+ 7 - 3
mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser-5.0/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/BaseMultiTableInnerInterceptor.java

@@ -17,6 +17,7 @@ package com.baomidou.mybatisplus.extension.plugins.inner;
 
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.parser.JsqlParserSupport;
+import com.baomidou.mybatisplus.jsqlparser.enums.ExpressionAppendMode;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
@@ -49,9 +50,11 @@ import java.util.stream.Collectors;
 public abstract class BaseMultiTableInnerInterceptor extends JsqlParserSupport implements InnerInterceptor {
 
     /**
-     * 条件表达式追加模式:true表示是后面追加(条件放最后),false表示插入到第一个位置(条件放第一个)
+     * 条件表达式追加模式 (默认放置最后,仅作用于update,delete,select)
+     *
+     * @since 3.5.11
      */
-    private boolean expressionAppendMode = true;
+    private ExpressionAppendMode expressionAppendMode = ExpressionAppendMode.LAST;
 
     protected void processSelectBody(Select selectBody, final String whereSegment) {
         if (selectBody == null) {
@@ -421,9 +424,10 @@ public abstract class BaseMultiTableInnerInterceptor extends JsqlParserSupport i
      * @param currentExpression 原sql的条件表达式
      * @param injectExpression  注入的表达式
      * @return 追加了条件的完整表达式(where条件 / on条件)
+     * @since 3.5.11
      */
     protected Expression appendExpression(Expression currentExpression, Expression injectExpression) {
-        if (expressionAppendMode) {
+        if (ExpressionAppendMode.LAST == expressionAppendMode || expressionAppendMode == null) {
             return new AndExpression(currentExpression, injectExpression);
         } else {
             return new AndExpression(injectExpression, currentExpression);

+ 2 - 2
mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser-5.0/src/test/java/com/baomidou/mybatisplus/test/extension/plugins/inner/TenantLineInnerInterceptorTest.java

@@ -2,9 +2,9 @@ package com.baomidou.mybatisplus.test.extension.plugins.inner;
 
 import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
 import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
+import com.baomidou.mybatisplus.jsqlparser.enums.ExpressionAppendMode;
 import net.sf.jsqlparser.expression.Expression;
 import net.sf.jsqlparser.expression.LongValue;
-import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
@@ -52,7 +52,7 @@ class TenantLineInnerInterceptorTest {
 
     @BeforeEach
     void init() {
-        interceptor2.setExpressionAppendMode(false);
+        interceptor2.setExpressionAppendMode(ExpressionAppendMode.FIRST);
     }
 
     @Test

+ 36 - 0
mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser-common/src/main/java/com/baomidou/mybatisplus/jsqlparser/enums/ExpressionAppendMode.java

@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2011-2025, baomidou (jobob@qq.com).
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.baomidou.mybatisplus.jsqlparser.enums;
+
+/**
+ * 表达式追加模式
+ *
+ * @author nieqiurong
+ * @since 3.5.11
+ */
+public enum ExpressionAppendMode {
+
+    /**
+     * 追加至首位
+     */
+    FIRST,
+
+    /**
+     * 追加至末尾
+     */
+    LAST
+
+}

+ 7 - 3
mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/BaseMultiTableInnerInterceptor.java

@@ -17,6 +17,7 @@ package com.baomidou.mybatisplus.extension.plugins.inner;
 
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.parser.JsqlParserSupport;
+import com.baomidou.mybatisplus.jsqlparser.enums.ExpressionAppendMode;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
@@ -49,9 +50,11 @@ import java.util.stream.Collectors;
 public abstract class BaseMultiTableInnerInterceptor extends JsqlParserSupport implements InnerInterceptor {
 
     /**
-     * 条件表达式追加模式:true表示是后面追加(条件放最后),false表示插入到第一个位置(条件放第一个)
+     * 条件表达式追加模式 (默认放置最后,仅作用于update,delete,select)
+     *
+     * @since 3.5.11
      */
-    private boolean expressionAppendMode = true;
+    private ExpressionAppendMode expressionAppendMode = ExpressionAppendMode.LAST;
 
     protected void processSelectBody(Select selectBody, final String whereSegment) {
         if (selectBody == null) {
@@ -420,9 +423,10 @@ public abstract class BaseMultiTableInnerInterceptor extends JsqlParserSupport i
      * @param currentExpression 原sql的条件表达式
      * @param injectExpression  注入的表达式
      * @return 追加了条件的完整表达式(where条件 / on条件)
+     * @since 3.5.11
      */
     protected Expression appendExpression(Expression currentExpression, Expression injectExpression) {
-        if (expressionAppendMode) {
+        if (ExpressionAppendMode.LAST == expressionAppendMode || expressionAppendMode == null) {
             return new AndExpression(currentExpression, injectExpression);
         } else {
             return new AndExpression(injectExpression, currentExpression);