24282 před 1 rokem
rodič
revize
376b15a970

+ 26 - 18
my-test/src/main/java/org/example/join/domain/QueryCondition.java

@@ -10,6 +10,7 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.StringJoiner;
+import java.util.stream.Collectors;
 
 public class QueryCondition implements IFormat {
 
@@ -50,27 +51,31 @@ public class QueryCondition implements IFormat {
 
     @Override
     public String toSql(Map<String, String> tableAliasMap, Map<String, Object> paramMap) {
-        StringJoiner joiner;
-        if (ObjectUtil.isEmpty(queryConditionConnectList)) {
-            joiner = new StringJoiner(StringPool.EMPTY);
-            if (ObjectUtil.isEmpty(value)) {
+
+        String connectStr = queryConditionConnectList.stream().map(item -> item.toSql(tableAliasMap, paramMap)).collect(Collectors.joining());
+        if (ObjectUtil.isEmpty(value)) {
+            if (ObjectUtil.isEmpty(connectStr)) {
                 return StringPool.EMPTY;
             }
-        } else {
-            joiner = new StringJoiner(StringPool.EMPTY, StringPool.LEFT_BRACKET, StringPool.RIGHT_BRACKET);
-            if (ObjectUtil.isEmpty(value)) {
-                queryConditionConnectList.forEach(item -> joiner.add(item.toSql(tableAliasMap, paramMap)));
-                String sql = joiner.toString();
-                if (sql.indexOf(SqlConstant.AND) == 0) {
-                    return sql.substring(SqlConstant.AND.length());
-                }
-                if (sql.indexOf(SqlConstant.OR) == 0) {
-                    return sql.substring(SqlConstant.OR.length());
-                }
-                return sql;
+
+            if (connectStr.startsWith(SqlConstant.AND)) {
+                connectStr = connectStr.substring(SqlConstant.AND.length());
+            } else if (connectStr.startsWith(SqlConstant.OR)) {
+                connectStr = connectStr.substring(SqlConstant.OR.length());
+            } else {
+                return StringPool.EMPTY;
+            }
+
+            if ((connectStr.contains(SqlConstant.AND) || connectStr.contains(SqlConstant.OR))
+                    && !connectStr.startsWith(StringPool.LEFT_BRACKET)
+                    && !connectStr.endsWith(StringPool.RIGHT_BRACKET)) {
+                return StringPool.LEFT_BRACKET + connectStr + StringPool.RIGHT_BRACKET;
             }
+
+            return connectStr;
         }
 
+        StringJoiner joiner = new StringJoiner(StringPool.EMPTY);
         joiner.add(column.toSql(tableAliasMap, paramMap));
 
         if (value instanceof IQueryColumn) {
@@ -120,8 +125,11 @@ public class QueryCondition implements IFormat {
             }
         }
 
-        queryConditionConnectList.forEach(item -> joiner.add(item.toSql(tableAliasMap, paramMap)));
-        return joiner.toString();
+        String sql = joiner.toString();
+        if (ObjectUtil.isEmpty(connectStr)) {
+            return sql;
+        }
+        return StringPool.LEFT_BRACKET + sql + StringPool.RIGHT_BRACKET;
     }
 
 }

+ 2 - 1
my-test/src/main/java/org/example/join/domain/QueryConditionConnect.java

@@ -1,5 +1,6 @@
 package org.example.join.domain;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import lombok.AllArgsConstructor;
 
@@ -18,7 +19,7 @@ public class QueryConditionConnect implements IFormat {
     @Override
     public String toSql(Map<String, String> tableAliasMap, Map<String, Object> paramMap) {
         String sql = queryCondition.toSql(tableAliasMap, paramMap);
-        if (StringPool.EMPTY.equals(sql)) {
+        if (ObjectUtil.isEmpty(sql)) {
             return StringPool.EMPTY;
         }
         return connectType + sql;

+ 0 - 5
my-test/src/main/java/org/example/join/domain/Table.java

@@ -17,11 +17,6 @@ public class Table implements IFormat, ITable {
         this.name = name;
     }
 
-    public Table(String alias, String name) {
-        this.alias = alias;
-        this.name = name;
-    }
-
     @Override
     public String toSql(Map<String, String> tableAliasMap, Map<String, Object> paramMap) {
         return name + StringPool.SPACE + SqlUtil.getTableAlias(this, tableAliasMap);