Просмотр исходного кода

[修改] 简化MP自定义SQL使用方法(测试用户待添加)

Caratacus 6 лет назад
Родитель
Сommit
80051f0483

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

@@ -15,13 +15,30 @@
  */
 package com.baomidou.mybatisplus.core.conditions;
 
-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.MergeSegments;
-import com.baomidou.mybatisplus.core.enums.SqlKeyword;
-import com.baomidou.mybatisplus.core.toolkit.*;
+import static com.baomidou.mybatisplus.core.enums.SqlKeyword.AND;
+import static com.baomidou.mybatisplus.core.enums.SqlKeyword.ASC;
+import static com.baomidou.mybatisplus.core.enums.SqlKeyword.BETWEEN;
+import static com.baomidou.mybatisplus.core.enums.SqlKeyword.DESC;
+import static com.baomidou.mybatisplus.core.enums.SqlKeyword.EQ;
+import static com.baomidou.mybatisplus.core.enums.SqlKeyword.EXISTS;
+import static com.baomidou.mybatisplus.core.enums.SqlKeyword.GE;
+import static com.baomidou.mybatisplus.core.enums.SqlKeyword.GROUP_BY;
+import static com.baomidou.mybatisplus.core.enums.SqlKeyword.GT;
+import static com.baomidou.mybatisplus.core.enums.SqlKeyword.HAVING;
+import static com.baomidou.mybatisplus.core.enums.SqlKeyword.IN;
+import static com.baomidou.mybatisplus.core.enums.SqlKeyword.IS_NOT_NULL;
+import static com.baomidou.mybatisplus.core.enums.SqlKeyword.IS_NULL;
+import static com.baomidou.mybatisplus.core.enums.SqlKeyword.LE;
+import static com.baomidou.mybatisplus.core.enums.SqlKeyword.LIKE;
+import static com.baomidou.mybatisplus.core.enums.SqlKeyword.LT;
+import static com.baomidou.mybatisplus.core.enums.SqlKeyword.NE;
+import static com.baomidou.mybatisplus.core.enums.SqlKeyword.NOT;
+import static com.baomidou.mybatisplus.core.enums.SqlKeyword.OR;
+import static com.baomidou.mybatisplus.core.enums.SqlKeyword.ORDER_BY;
+import static com.baomidou.mybatisplus.core.enums.WrapperKeyword.APPLY;
+import static com.baomidou.mybatisplus.core.enums.WrapperKeyword.LEFT_BRACKET;
+import static com.baomidou.mybatisplus.core.enums.WrapperKeyword.RIGHT_BRACKET;
+import static java.util.stream.Collectors.joining;
 
 import java.util.Arrays;
 import java.util.Collection;
@@ -31,9 +48,20 @@ import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.BiPredicate;
 import java.util.function.Function;
 
-import static com.baomidou.mybatisplus.core.enums.SqlKeyword.*;
-import static com.baomidou.mybatisplus.core.enums.WrapperKeyword.*;
-import static java.util.stream.Collectors.joining;
+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.MergeSegments;
+import com.baomidou.mybatisplus.core.conditions.segments.NormalSegmentList;
+import com.baomidou.mybatisplus.core.enums.SqlKeyword;
+import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
+import com.baomidou.mybatisplus.core.toolkit.Assert;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.core.toolkit.SerializationUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 
 
 /**
@@ -446,6 +474,27 @@ public abstract class AbstractWrapper<T, R, This extends AbstractWrapper<T, R, T
         return null;
     }
 
+    @Override
+    public String getCustomSql() {
+        NormalSegmentList normal = getExpression().getNormal();
+        if (normal.isEmpty()) {
+            return getSqlSegment();
+        } else {
+            return concatWhere(getSqlSegment());
+        }
+    }
+
+    /**
+     * 拼接`WHERE`至SQL前
+     *
+     * @param sql
+     * @return
+     */
+    private String concatWhere(String sql) {
+        return Constants.WHERE + " " + sql;
+    }
+
+
     @Override
     public MergeSegments getExpression() {
         return expression;

+ 11 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/Wrapper.java

@@ -64,6 +64,17 @@ public abstract class Wrapper<T> implements ISqlSegment {
      */
     public abstract MergeSegments getExpression();
 
+    /**
+     * 获取自定义SQL 简化自定义XML复杂情况
+     * 使用方法
+     * `自定义sql` + #{ew.customSql}
+     * <p>1.逻辑删除需要自己拼接条件 (之前自定义也同样)</p>
+     * <p>2.不支持wrapper中附带实体的情况 (wrapper自带实体会更麻烦)</p>
+     * <p>3.用法 #{ew.customSql} (不需要where标签包裹,切记!)</>
+     * <p>4.ew是wrapper定义别名,可自行替换</>
+     */
+    public abstract String getCustomSql();
+
     /**
      * 查询条件为空(包含entity)
      */

+ 4 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/Constants.java

@@ -98,4 +98,8 @@ public interface Constants extends StringPool {
      * collection
      */
     String COLLECTION = "coll";
+    /**
+     * where
+     */
+    String WHERE = "WHERE";
 }