Explorar o código

Wrapper add `and()` `or()` methods

Caratacus %!s(int64=8) %!d(string=hai) anos
pai
achega
9a9056d12a
Modificáronse 1 ficheiros con 58 adicións e 5 borrados
  1. 58 5
      src/main/java/com/baomidou/mybatisplus/mapper/Wrapper.java

+ 58 - 5
src/main/java/com/baomidou/mybatisplus/mapper/Wrapper.java

@@ -129,16 +129,37 @@ public abstract class Wrapper<T> implements Serializable {
     public String toString() {
         StringBuilder sb = new StringBuilder("Wrapper<T>:");
         String sqlSegment = getSqlSegment();
-        if (StringUtils.isNotEmpty(sqlSegment)) {
-            sb.append(getSqlSegment().replaceAll("#\\{" + getParamAlias() + ".paramNameValuePairs.MPGENVAL[0-9]+}", "\\?")).append("\n");
-        }
+        sb.append(replacePlaceholder(sqlSegment));
         Object entity = getEntity();
         if (entity != null) {
+            sb.append("\n");
             sb.append("entity=").append(entity.toString());
         }
         return sb.toString();
     }
 
+    /**
+     * 替换占位符
+     *
+     * @param sqlSegment
+     * @return
+     */
+    private String replacePlaceholder(String sqlSegment) {
+        if (StringUtils.isEmpty(sqlSegment)) {
+            return StringUtils.EMPTY;
+        }
+        return sqlSegment.replaceAll("#\\{" + getParamAlias() + ".paramNameValuePairs.MPGENVAL[0-9]+}", "\\?");
+    }
+
+    /**
+     * 原生占位符sql
+     *
+     * @return
+     */
+    public String originalSql() {
+        return replacePlaceholder(getSqlSegment());
+    }
+
     /**
      * <p>
      * SQL中WHERE关键字跟的条件语句
@@ -443,6 +464,22 @@ public abstract class Wrapper<T> implements Serializable {
         return this;
     }
 
+    /**
+     * <p>
+     * 使用AND连接并换行
+     * </p>
+     * <p>
+     * eg: ew.where("name='zhangsan'").and("id=11").andNew("statu=1"); 输出: WHERE
+     * (name='zhangsan' AND id=11) AND (statu=1)
+     * </p>
+     *
+     * @return this
+     */
+    public Wrapper<T> andNew() {
+        sql.AND_NEW();
+        return this;
+    }
+
     /**
      * <p>
      * 使用AND连接并换行
@@ -469,7 +506,7 @@ public abstract class Wrapper<T> implements Serializable {
      * @return this
      */
     public Wrapper<T> and() {
-        sql.AND_NEW();
+        sql.AND();
         return this;
     }
 
@@ -481,7 +518,7 @@ public abstract class Wrapper<T> implements Serializable {
      * @return this
      */
     public Wrapper<T> or() {
-        sql.OR_NEW();
+        sql.OR();
         return this;
     }
 
@@ -518,6 +555,22 @@ public abstract class Wrapper<T> implements Serializable {
         return or(true, sqlOr, params);
     }
 
+    /**
+     * <p>
+     * 使用OR换行,并添加一个带()的新的条件
+     * </p>
+     * <p>
+     * eg: ew.where("name='zhangsan'").and("id=11").orNew("statu=1"); 输出: WHERE
+     * (name='zhangsan' AND id=11) OR (statu=1)
+     * </p>
+     *
+     * @return this
+     */
+    public Wrapper<T> orNew() {
+        sql.OR_NEW();
+        return this;
+    }
+
     /**
      * <p>
      * 使用OR换行,并添加一个带()的新的条件