Browse Source

优化只存在 order by 和 group by 情况下的获取 sql

miemie 7 years ago
parent
commit
279ee5f107

+ 2 - 2
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/AbstractWrapper.java

@@ -50,7 +50,7 @@ import com.baomidou.mybatisplus.core.conditions.interfaces.Compare;
 import com.baomidou.mybatisplus.core.conditions.interfaces.Func;
 import com.baomidou.mybatisplus.core.conditions.interfaces.Join;
 import com.baomidou.mybatisplus.core.conditions.interfaces.Nested;
-import com.baomidou.mybatisplus.core.conditions.segments.MergeSegment;
+import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;
 import com.baomidou.mybatisplus.core.enums.SqlKeyword;
 import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
@@ -91,7 +91,7 @@ public abstract class AbstractWrapper<T, R, This extends AbstractWrapper<T, R, T
      * 数据库表映射实体类
      */
     protected T entity;
-    private MergeSegment expression = new MergeSegment();
+    private MergeSegments expression = new MergeSegments();
 
     @Override
     public T getEntity() {

+ 13 - 2
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/segments/MergeSegment.java → mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/segments/MergeSegments.java

@@ -28,7 +28,7 @@ import com.baomidou.mybatisplus.core.conditions.ISqlSegment;
  * @author miemie
  * @since 2018-06-27
  */
-public class MergeSegment implements ISqlSegment {
+public class MergeSegments implements ISqlSegment {
 
     private static final long serialVersionUID = 8401728865419013555L;
 
@@ -50,6 +50,17 @@ public class MergeSegment implements ISqlSegment {
 
     @Override
     public String getSqlSegment() {
-        return normal.getSqlSegment() + groupBy.getSqlSegment() + orderBy.getSqlSegment();
+        boolean isNullNormal = normal.isEmpty();
+        boolean isNullGroupBy = groupBy.isEmpty();
+        boolean isNullOrderBy = orderBy.isEmpty();
+        if (isNullNormal) {
+            if (!isNullGroupBy || !isNullOrderBy) {
+                return "1=1" + groupBy.getSqlSegment() + orderBy.getSqlSegment();
+            } else {
+                return "";
+            }
+        } else {
+            return normal.getSqlSegment() + groupBy.getSqlSegment() + orderBy.getSqlSegment();
+        }
     }
 }

+ 6 - 0
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/test/WrapperTest.java

@@ -102,6 +102,12 @@ public class WrapperTest {
             .last("limit 1")
             .orderByAsc("id", "name", "sex").orderByDesc("age", "txl")
             .groupBy("id", "name", "sex").groupBy("id", "name"));
+
+        logSqlSegment("只存在 order by", new QueryWrapper<User>()
+            .orderByAsc("id", "name", "sex").orderByDesc("age", "txl"));
+
+        logSqlSegment("只存在 group by", new QueryWrapper<User>()
+            .groupBy("id", "name", "sex").groupBy("id", "name"));
     }
 
 //    public void test() {