Browse Source

优化并检测

miemie 7 years ago
parent
commit
84ddb15249

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

@@ -34,7 +34,6 @@ import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
 import java.lang.reflect.TypeVariable;
 import java.lang.reflect.WildcardType;
-import java.text.MessageFormat;
 
 /**
  * <p>
@@ -178,9 +177,11 @@ public abstract class AbstractMethod {
     protected String sqlWhereByMap(TableInfo table) {
         String sqlScript = SqlScriptUtils.convertChoose("v == null", " ${k} IS NULL ",
             " ${k} = #{v} ");
-        sqlScript = SqlScriptUtils.convertForeach(sqlScript, "cm", "k", "v", "AND");
+        sqlScript = SqlScriptUtils.convertForeach(sqlScript, Constants.COLUMN_MAP, "k", "v", "AND");
+        sqlScript = SqlScriptUtils.convertWhere(sqlScript);
         sqlScript = StringPool.NEWLINE + sqlScript + StringPool.NEWLINE;
-        sqlScript = SqlScriptUtils.convertIf(sqlScript, "cm != null and !cm.isEmpty");
+        sqlScript = SqlScriptUtils.convertIf(sqlScript,
+            String.format("%s != null and !%s", Constants.COLUMN_MAP, Constants.COLUMN_MAP_IS_EMPTY));
         return sqlScript;
     }
 
@@ -198,9 +199,9 @@ public abstract class AbstractMethod {
         sqlScript = SqlScriptUtils.convertIf(sqlScript, String.format("%s != null", Constants.WRAPPER_ENTITY));
         sqlScript += StringPool.NEWLINE;
         sqlScript += SqlScriptUtils.convertIf(String.format(" AND ${%s}", Constants.WRAPPER_SQLSEGMENT),
-            MessageFormat.format("{0} != null and {0} != ''", Constants.WRAPPER_SQLSEGMENT));
+            String.format("%s != null and %s != ''", Constants.WRAPPER_SQLSEGMENT, Constants.WRAPPER_SQLSEGMENT));
         sqlScript = SqlScriptUtils.convertTrim(sqlScript, "WHERE", null, "AND|OR", null);
-        sqlScript = SqlScriptUtils.convertIf(sqlScript, "ew!=null and !ew.emptyOfWhere");
+        sqlScript = SqlScriptUtils.convertIf(sqlScript, "ew != null and !ew.emptyOfWhere");
         return sqlScript;
     }
 

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

@@ -78,6 +78,10 @@ public interface Constants {
      * columnMap
      */
     String COLUMN_MAP = "cm";
+    /**
+     * columnMap.isEmpty
+     */
+    String COLUMN_MAP_IS_EMPTY = COLUMN_MAP + SPOT + "isEmpty";
     /**
      * collection
      */

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

@@ -113,4 +113,8 @@ public final class SqlScriptUtils {
         return sb.append(StringPool.RIGHT_CHEV).append(StringPool.NEWLINE).append(sqlScript)
             .append(StringPool.NEWLINE).append("</foreach>").toString();
     }
+
+    public static String convertWhere(String sqlScript) {
+        return "<where>" + StringPool.NEWLINE + sqlScript + StringPool.NEWLINE + "</where>";
+    }
 }

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

@@ -21,8 +21,6 @@ import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils;
 
-import java.text.MessageFormat;
-
 /**
  * <p>
  * 抽象的注入方法类
@@ -57,10 +55,10 @@ public abstract class AbstractLogicMethod extends AbstractMethod {
             String sqlScript = table.getAllSqlWhere(true, true, Constants.WRAPPER_ENTITY_SPOT);
             sqlScript = StringPool.NEWLINE + sqlScript + StringPool.NEWLINE;
             sqlScript = SqlScriptUtils.convertIf(sqlScript, String.format("%s != null", Constants.WRAPPER_ENTITY));
-            sqlScript += (StringPool.NEWLINE + table.getLogicDeleteSql(true, true));
+            sqlScript += (StringPool.NEWLINE + table.getLogicDeleteSql(true, false));
             sqlScript += StringPool.NEWLINE;
             sqlScript += SqlScriptUtils.convertIf(String.format(" AND ${%s}", Constants.WRAPPER_SQLSEGMENT),
-                MessageFormat.format("{0} != null and {0} != ''", Constants.WRAPPER_SQLSEGMENT));
+                String.format("%s!=null and %s!=''", Constants.WRAPPER_SQLSEGMENT, Constants.WRAPPER_SQLSEGMENT));
             sqlScript = SqlScriptUtils.convertTrim(sqlScript, "WHERE", null, "AND|OR", null);
             sqlScript = SqlScriptUtils.convertChoose("ew!=null and !ew.emptyOfWhere", sqlScript,
                 "WHERE " + table.getLogicDeleteSql(false, false));
@@ -72,12 +70,17 @@ public abstract class AbstractLogicMethod extends AbstractMethod {
 
     @Override
     protected String sqlWhereByMap(TableInfo table) {
-        String sqlScript = super.sqlWhereByMap(table);
         if (table.isLogicDelete()) {
             // 逻辑删除
+            String sqlScript = SqlScriptUtils.convertChoose("v == null", " ${k} IS NULL ",
+                " ${k} = #{v} ");
+            sqlScript = SqlScriptUtils.convertForeach(sqlScript, "cm", "k", "v", "AND");
+            sqlScript = StringPool.NEWLINE + sqlScript + StringPool.NEWLINE;
+            sqlScript = SqlScriptUtils.convertIf(sqlScript, "cm != null and !cm.isEmpty");
             sqlScript += (StringPool.NEWLINE + table.getLogicDeleteSql(true, false));
             sqlScript = SqlScriptUtils.convertTrim(sqlScript, "WHERE", null, "AND", null);
+            return sqlScript;
         }
-        return sqlScript;
+        return super.sqlWhereByMap(table);
     }
 }