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

使用<where><set>代替<trim>

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

+ 2 - 2
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/AbstractMethod.java

@@ -124,7 +124,7 @@ public abstract class AbstractMethod {
             sqlScript += SqlScriptUtils.convertIf(SqlScriptUtils.unSafeParam(Constants.U_WRAPPER_SQL_SET),
                 String.format("%s != null and %s != null", Constants.WRAPPER, Constants.U_WRAPPER_SQL_SET), false);
         }
-        sqlScript = SqlScriptUtils.convertTrim(sqlScript, "SET", null, null, ",");
+        sqlScript = SqlScriptUtils.convertSet(sqlScript);
         return sqlScript;
     }
 
@@ -195,7 +195,7 @@ public abstract class AbstractMethod {
         sqlScript += SqlScriptUtils.convertIf(String.format(" ${%s}", Constants.WRAPPER_SQLSEGMENT),
             String.format("%s != null and %s != '' and ew.nonEmptyOfWhere", Constants.WRAPPER_SQLSEGMENT, Constants.WRAPPER_SQLSEGMENT),
             true);
-        sqlScript = SqlScriptUtils.convertTrim(sqlScript, "WHERE", null, "AND|OR", null);
+        sqlScript = SqlScriptUtils.convertWhere(sqlScript);
         sqlScript += StringPool.NEWLINE;
         sqlScript += SqlScriptUtils.convertIf(String.format(" ${%s}", Constants.WRAPPER_SQLSEGMENT),
             String.format("%s != null and %s != '' and ew.emptyOfWhere", Constants.WRAPPER_SQLSEGMENT, Constants.WRAPPER_SQLSEGMENT),

+ 11 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/sql/SqlScriptUtils.java

@@ -138,6 +138,17 @@ public final class SqlScriptUtils {
     public static String convertWhere(final String sqlScript) {
         return "<where>" + StringPool.NEWLINE + sqlScript + StringPool.NEWLINE + "</where>";
     }
+    /**
+     * <p>
+     * 生成 set 标签的脚本
+     * </p>
+     *
+     * @param sqlScript set 内部的 sql 脚本
+     * @return set 脚本
+     */
+    public static String convertSet(final String sqlScript) {
+        return "<set>" + StringPool.NEWLINE + sqlScript + StringPool.NEWLINE + "</set>";
+    }
 
     /**
      * <p>

+ 3 - 3
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/injector/AbstractLogicMethod.java

@@ -67,8 +67,8 @@ public abstract class AbstractLogicMethod extends AbstractMethod {
             sqlScript += normalsqlScript;
             sqlScript = SqlScriptUtils.convertChoose("ew!=null", sqlScript,
                 table.getLogicDeleteSql(true, false));
-            sqlScript = SqlScriptUtils.convertTrim(sqlScript, "WHERE", null, "AND|OR",
-                null);
+            sqlScript = SqlScriptUtils.convertWhere(sqlScript);
+
             return sqlScript;
         }
         // 正常逻辑
@@ -84,7 +84,7 @@ public abstract class AbstractLogicMethod extends AbstractMethod {
             sqlScript = SqlScriptUtils.convertForeach(sqlScript, "cm", "k", "v", "AND");
             sqlScript = SqlScriptUtils.convertIf(sqlScript, "cm != null and !cm.isEmpty", true);
             sqlScript += (StringPool.NEWLINE + table.getLogicDeleteSql(true, false));
-            sqlScript = SqlScriptUtils.convertTrim(sqlScript, "WHERE", null, "AND", null);
+            sqlScript = SqlScriptUtils.convertWhere(sqlScript);
             return sqlScript;
         }
         return super.sqlWhereByMap(table);