Pārlūkot izejas kodu

优化一下 `MergeSegments` 获取 `getSqlSegment` 方式

miemie 6 gadi atpakaļ
vecāks
revīzija
d69b5a7834

+ 14 - 9
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/segments/MergeSegments.java

@@ -15,14 +15,13 @@
  */
 package com.baomidou.mybatisplus.core.conditions.segments;
 
-import java.util.Arrays;
-import java.util.List;
-
 import com.baomidou.mybatisplus.core.conditions.ISqlSegment;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
-
 import lombok.Getter;
 
+import java.util.Arrays;
+import java.util.List;
+
 /**
  * <p>
  * 合并 SQL 片段
@@ -40,6 +39,9 @@ public class MergeSegments implements ISqlSegment {
     private final HavingSegmentList having = new HavingSegmentList();
     private final OrderBySegmentList orderBy = new OrderBySegmentList();
 
+    private String sqlSegment = StringPool.EMPTY;
+    private boolean cacheSqlSegment = true;
+
     public void add(ISqlSegment... iSqlSegments) {
         List<ISqlSegment> list = Arrays.asList(iSqlSegments);
         ISqlSegment sqlSegment = list.get(0);
@@ -52,19 +54,22 @@ public class MergeSegments implements ISqlSegment {
         } else {
             normal.addAll(list);
         }
+        cacheSqlSegment = false;
     }
 
     @Override
     public String getSqlSegment() {
+        if (cacheSqlSegment) {
+            return sqlSegment;
+        }
+        cacheSqlSegment = true;
         if (normal.isEmpty()) {
             if (!groupBy.isEmpty() || !orderBy.isEmpty()) {
-                return groupBy.getSqlSegment() + having.getSqlSegment() + orderBy.getSqlSegment();
-            } else {
-                return StringPool.EMPTY;
+                sqlSegment = groupBy.getSqlSegment() + having.getSqlSegment() + orderBy.getSqlSegment();
             }
         } else {
-            return normal.getSqlSegment() + groupBy.getSqlSegment() + having.getSqlSegment() + orderBy.getSqlSegment();
+            sqlSegment = normal.getSqlSegment() + groupBy.getSqlSegment() + having.getSqlSegment() + orderBy.getSqlSegment();
         }
+        return sqlSegment;
     }
-
 }