Browse Source

优化一下方法

miemie 7 years ago
parent
commit
41464c4dbc

+ 30 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/iSqlSegments/GroupByISqlSegment.java

@@ -0,0 +1,30 @@
+package com.baomidou.mybatisplus.core.toolkit.iSqlSegments;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.conditions.ISqlSegment;
+
+/**
+ * @author miemie
+ * @since 2018-06-27
+ */
+public class GroupByISqlSegment extends ArrayList<ISqlSegment> implements ISqlSegment {
+
+    private static final long serialVersionUID = -4135938724727477310L;
+
+    @Override
+    public boolean addAll(Collection<? extends ISqlSegment> c) {
+        List<ISqlSegment> list = new ArrayList<>(c);
+        if (!isEmpty()) {
+            list.remove(0);
+        }
+        return super.addAll(list);
+    }
+
+    @Override
+    public String getSqlSegment() {
+        return null;
+    }
+}

+ 64 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/iSqlSegments/JoinISqlSegment.java

@@ -0,0 +1,64 @@
+package com.baomidou.mybatisplus.core.toolkit.iSqlSegments;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.function.Predicate;
+
+import com.baomidou.mybatisplus.core.conditions.ISqlSegment;
+import com.baomidou.mybatisplus.core.enums.SqlKeyword;
+
+/**
+ * @author miemie
+ * @since 2018-06-27
+ */
+public class JoinISqlSegment implements ISqlSegment {
+
+    private static final long serialVersionUID = 8401728865419013555L;
+
+    private NormalISqlSegment normalISqlSegment = new NormalISqlSegment();
+    private GroupByISqlSegment groupByISqlSegment = new GroupByISqlSegment();
+    private OrderByISqlSegment orderByISqlSegment = new OrderByISqlSegment();
+
+    public void add(ISqlSegment... iSqlSegments) {
+        List<ISqlSegment> list = Arrays.asList(iSqlSegments);
+        ISqlSegment sqlSegment = list.get(0);
+        if (match(PredicateStrategy.ORDER_BY, sqlSegment)) {
+            orderByISqlSegment.addAll(list);
+        } else if (match(PredicateStrategy.GROUP_BY, sqlSegment)) {
+            groupByISqlSegment.addAll(list);
+        } else {
+            normalISqlSegment.addAll(list);
+        }
+    }
+
+    private boolean match(PredicateStrategy predicateStrategy, ISqlSegment value) {
+        return predicateStrategy.getPredicate().test(value);
+    }
+
+    @Override
+    public String getSqlSegment() {
+        return normalISqlSegment.getSqlSegment() + groupByISqlSegment.getSqlSegment() + orderByISqlSegment.getSqlSegment();
+    }
+
+    /**
+     * 验证策略
+     */
+    private enum PredicateStrategy {
+        GROUP_BY(i -> i == SqlKeyword.GROUP_BY),
+        ORDER_BY(i -> i == SqlKeyword.ORDER_BY),
+        NOT(i -> i == SqlKeyword.NOT),
+        AND(i -> i == SqlKeyword.AND),
+        OR(i -> i == SqlKeyword.OR),
+        AND_OR(i -> i == SqlKeyword.AND || i == SqlKeyword.OR);
+
+        private Predicate<ISqlSegment> predicate;
+
+        PredicateStrategy(Predicate<ISqlSegment> predicate) {
+            this.predicate = predicate;
+        }
+
+        public Predicate<ISqlSegment> getPredicate() {
+            return predicate;
+        }
+    }
+}

+ 20 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/iSqlSegments/NormalISqlSegment.java

@@ -0,0 +1,20 @@
+package com.baomidou.mybatisplus.core.toolkit.iSqlSegments;
+
+import java.util.ArrayList;
+import java.util.stream.Collectors;
+
+import com.baomidou.mybatisplus.core.conditions.ISqlSegment;
+
+/**
+ * @author miemie
+ * @since 2018-06-27
+ */
+public class NormalISqlSegment extends ArrayList<ISqlSegment> implements ISqlSegment {
+
+    private static final long serialVersionUID = -1991374407733611565L;
+
+    @Override
+    public String getSqlSegment() {
+        return this.stream().map(ISqlSegment::getSqlSegment).collect(Collectors.joining("and"));
+    }
+}

+ 20 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/iSqlSegments/OrderByISqlSegment.java

@@ -0,0 +1,20 @@
+package com.baomidou.mybatisplus.core.toolkit.iSqlSegments;
+
+import java.util.ArrayList;
+import java.util.stream.Collectors;
+
+import com.baomidou.mybatisplus.core.conditions.ISqlSegment;
+
+/**
+ * @author miemie
+ * @since 2018-06-27
+ */
+public class OrderByISqlSegment extends ArrayList<ISqlSegment> implements ISqlSegment {
+
+    private static final long serialVersionUID = -294655105160779712L;
+
+    @Override
+    public String getSqlSegment() {
+        return this.stream().map(ISqlSegment::getSqlSegment).collect(Collectors.joining(","));
+    }
+}