Bladeren bron

last方法回归

miemie 7 jaren geleden
bovenliggende
commit
416a6f888f

+ 10 - 3
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.JoinSegment;
+import com.baomidou.mybatisplus.core.conditions.segments.MergeSegment;
 import com.baomidou.mybatisplus.core.enums.SqlKeyword;
 import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
@@ -86,11 +86,12 @@ public abstract class AbstractWrapper<T, R, This extends AbstractWrapper<T, R, T
     protected AtomicInteger paramNameSeq;
     protected Map<String, Object> paramNameValuePairs;
     protected String paramAlias = null;
+    protected String lastSql = "";
     /**
      * 数据库表映射实体类
      */
     protected T entity;
-    private JoinSegment expression = new JoinSegment();
+    private MergeSegment expression = new MergeSegment();
 
     @Override
     public T getEntity() {
@@ -320,6 +321,12 @@ public abstract class AbstractWrapper<T, R, This extends AbstractWrapper<T, R, T
         return doIt(condition, () -> formatSql(applySql, value));
     }
 
+    @Override
+    public This last(boolean condition, String lastSql) {
+        this.lastSql = " " + lastSql;
+        return typedThis;
+    }
+
     /**
      * EXISTS ( sql 语句 )
      */
@@ -560,7 +567,7 @@ public abstract class AbstractWrapper<T, R, This extends AbstractWrapper<T, R, T
 
     @Override
     public String getSqlSegment() {
-        return expression.getSqlSegment();
+        return expression.getSqlSegment() + lastSql;
     }
 
     public Map<String, Object> getParamNameValuePairs() {

+ 13 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/interfaces/Join.java

@@ -96,6 +96,19 @@ public interface Join<This> extends Serializable {
      */
     This apply(boolean condition, String applySql, Object... value);
 
+    /**
+     * 无视优化规则直接拼接到 sql 的最后
+     * 例: last("limit 1")
+     */
+    default This last(String lastSql) {
+        return last(true, lastSql);
+    }
+
+    /**
+     * 无视优化规则直接拼接到 sql 的最后
+     * 例: last("limit 1")
+     */
+    This last(boolean condition, String lastSql);
 
     /**
      * EXISTS ( sql 语句 )

+ 1 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/segments/GroupBySegment.java → mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/segments/GroupBySegmentList.java

@@ -32,7 +32,7 @@ import com.baomidou.mybatisplus.core.conditions.ISqlSegment;
  * @author miemie
  * @since 2018-06-27
  */
-public class GroupBySegment extends ArrayList<ISqlSegment> implements ISqlSegment {
+public class GroupBySegmentList extends ArrayList<ISqlSegment> implements ISqlSegment {
 
     private static final long serialVersionUID = -4135938724727477310L;
 

+ 8 - 8
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/segments/JoinSegment.java → mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/segments/MergeSegment.java

@@ -28,28 +28,28 @@ import com.baomidou.mybatisplus.core.conditions.ISqlSegment;
  * @author miemie
  * @since 2018-06-27
  */
-public class JoinSegment implements ISqlSegment {
+public class MergeSegment implements ISqlSegment {
 
     private static final long serialVersionUID = 8401728865419013555L;
 
-    private NormalSegment normalSegment = new NormalSegment();
-    private GroupBySegment groupBySegment = new GroupBySegment();
-    private OrderBySegment orderBySegment = new OrderBySegment();
+    private NormalSegmentList normal = new NormalSegmentList();
+    private GroupBySegmentList groupBy = new GroupBySegmentList();
+    private OrderBySegmentList orderBy = new OrderBySegmentList();
 
     public void add(ISqlSegment... iSqlSegments) {
         List<ISqlSegment> list = Arrays.asList(iSqlSegments);
         ISqlSegment sqlSegment = list.get(0);
         if (MatchSegment.ORDER_BY.match(sqlSegment)) {
-            orderBySegment.addAll(list);
+            orderBy.addAll(list);
         } else if (MatchSegment.GROUP_BY.match(sqlSegment)) {
-            groupBySegment.addAll(list);
+            groupBy.addAll(list);
         } else {
-            normalSegment.addAll(list);
+            normal.addAll(list);
         }
     }
 
     @Override
     public String getSqlSegment() {
-        return normalSegment.getSqlSegment() + groupBySegment.getSqlSegment() + orderBySegment.getSqlSegment();
+        return normal.getSqlSegment() + groupBy.getSqlSegment() + orderBy.getSqlSegment();
     }
 }

+ 1 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/segments/NormalSegment.java → mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/segments/NormalSegmentList.java

@@ -31,7 +31,7 @@ import com.baomidou.mybatisplus.core.enums.SqlKeyword;
  * @author miemie
  * @since 2018-06-27
  */
-public class NormalSegment extends ArrayList<ISqlSegment> implements ISqlSegment {
+public class NormalSegmentList extends ArrayList<ISqlSegment> implements ISqlSegment {
 
     private static final long serialVersionUID = -1991374407733611565L;
     /**

+ 1 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/segments/OrderBySegment.java → mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/segments/OrderBySegmentList.java

@@ -32,7 +32,7 @@ import com.baomidou.mybatisplus.core.conditions.ISqlSegment;
  * @author miemie
  * @since 2018-06-27
  */
-public class OrderBySegment extends ArrayList<ISqlSegment> implements ISqlSegment {
+public class OrderBySegmentList extends ArrayList<ISqlSegment> implements ISqlSegment {
 
     private static final long serialVersionUID = -294655105160779712L;