Browse Source

优化一处

miemie 7 years ago
parent
commit
f24e48a881

+ 21 - 21
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/enums/SqlMethod.java

@@ -27,50 +27,50 @@ public enum SqlMethod {
     /**
     /**
      * 插入
      * 插入
      */
      */
-    INSERT_ONE("insert", "插入一条数据(选择字段插入)", "<script>INSERT INTO %s %s VALUES %s</script>"),
+    INSERT_ONE("insert", "插入一条数据(选择字段插入)", "<script>\nINSERT INTO %s %s VALUES %s</script>"),
 
 
     /**
     /**
      * 删除
      * 删除
      */
      */
-    DELETE_BY_ID("deleteById", "根据ID 删除一条数据", "<script>DELETE FROM %s WHERE %s=#{%s}</script>"),
-    DELETE_BY_MAP("deleteByMap", "根据columnMap 条件删除记录", "<script>DELETE FROM %s %s</script>"),
+    DELETE_BY_ID("deleteById", "根据ID 删除一条数据", "<script>\nDELETE FROM %s WHERE %s=#{%s}</script>"),
+    DELETE_BY_MAP("deleteByMap", "根据columnMap 条件删除记录", "<script>\nDELETE FROM %s %s</script>"),
     DELETE("delete", "根据 entity 条件删除记录", "<script>DELETE FROM %s %s</script>"),
     DELETE("delete", "根据 entity 条件删除记录", "<script>DELETE FROM %s %s</script>"),
-    DELETE_BATCH_BY_IDS("deleteBatchIds", "根据ID集合,批量删除数据", "<script>DELETE FROM %s WHERE %s IN (%s)</script>"),
+    DELETE_BATCH_BY_IDS("deleteBatchIds", "根据ID集合,批量删除数据", "<script>\nDELETE FROM %s WHERE %s IN (%s)</script>"),
 
 
     /**
     /**
      * 逻辑删除
      * 逻辑删除
      */
      */
-    LOGIC_DELETE_BY_ID("deleteById", "根据ID 逻辑删除一条数据", "<script>UPDATE %s %s WHERE %s=#{%s} %s</script>"),
-    LOGIC_DELETE_BY_MAP("deleteByMap", "根据columnMap 条件逻辑删除记录", "<script>UPDATE %s %s %s</script>"),
-    LOGIC_DELETE("delete", "根据 entity 条件逻辑删除记录", "<script>UPDATE %s %s %s</script>"),
-    LOGIC_DELETE_BATCH_BY_IDS("deleteBatchIds", "根据ID集合,批量逻辑删除数据", "<script>UPDATE %s %s WHERE %s IN (%s) %s</script>"),
+    LOGIC_DELETE_BY_ID("deleteById", "根据ID 逻辑删除一条数据", "<script>\nUPDATE %s %s WHERE %s=#{%s} %s</script>"),
+    LOGIC_DELETE_BY_MAP("deleteByMap", "根据columnMap 条件逻辑删除记录", "<script>\nUPDATE %s %s %s</script>"),
+    LOGIC_DELETE("delete", "根据 entity 条件逻辑删除记录", "<script>\nUPDATE %s %s %s</script>"),
+    LOGIC_DELETE_BATCH_BY_IDS("deleteBatchIds", "根据ID集合,批量逻辑删除数据", "<script>\nUPDATE %s %s WHERE %s IN (%s) %s</script>"),
 
 
     /**
     /**
      * 修改
      * 修改
      */
      */
-    UPDATE_BY_ID("updateById", "根据ID 选择修改数据", "<script>UPDATE %s %s WHERE %s=#{%s} %s</script>"),
-    UPDATE("update", "根据 whereEntity 条件,更新记录", "<script>UPDATE %s %s %s</script>"),
+    UPDATE_BY_ID("updateById", "根据ID 选择修改数据", "<script>\nUPDATE %s %s WHERE %s=#{%s} %s</script>"),
+    UPDATE("update", "根据 whereEntity 条件,更新记录", "<script>\nUPDATE %s %s %s</script>"),
 
 
     /**
     /**
      * 逻辑删除 -> 修改
      * 逻辑删除 -> 修改
      */
      */
-    LOGIC_UPDATE_BY_ID("updateById", "根据ID 修改数据", "<script>UPDATE %s %s WHERE %s=#{%s} %s</script>"),
-    LOGIC_UPDATE_ALL_COLUMN_BY_ID("updateAllColumnById", "根据ID 选择修改数据", "<script>UPDATE %s %s WHERE %s=#{%s} %s</script>"),
+    LOGIC_UPDATE_BY_ID("updateById", "根据ID 修改数据", "<script>\nUPDATE %s %s WHERE %s=#{%s} %s</script>"),
+    LOGIC_UPDATE_ALL_COLUMN_BY_ID("updateAllColumnById", "根据ID 选择修改数据", "<script>\nUPDATE %s %s WHERE %s=#{%s} %s</script>"),
 
 
 
 
     /**
     /**
      * 查询
      * 查询
      */
      */
     SELECT_BY_ID("selectById", "根据ID 查询一条数据", "SELECT %s FROM %s WHERE %s=#{%s}"),
     SELECT_BY_ID("selectById", "根据ID 查询一条数据", "SELECT %s FROM %s WHERE %s=#{%s}"),
-    SELECT_BY_MAP("selectByMap", "根据columnMap 查询一条数据", "<script>SELECT %s FROM %s %s</script>"),
-    SELECT_BATCH_BY_IDS("selectBatchIds", "根据ID集合,批量查询数据", "<script>SELECT %s FROM %s WHERE %s IN (%s)</script>"),
-    SELECT_ONE("selectOne", "查询满足条件一条数据", "<script>SELECT %s FROM %s %s</script>"),
-    SELECT_COUNT("selectCount", "查询满足条件总记录数", "<script>SELECT COUNT(1) FROM %s %s</script>"),
-    SELECT_LIST("selectList", "查询满足条件所有数据", "<script>SELECT %s FROM %s %s</script>"),
-    SELECT_PAGE("selectPage", "查询满足条件所有数据(并翻页)", "<script>SELECT %s FROM %s %s</script>"),
-    SELECT_MAPS("selectMaps", "查询满足条件所有数据", "<script>SELECT %s FROM %s %s</script>"),
-    SELECT_MAPS_PAGE("selectMapsPage", "查询满足条件所有数据(并翻页)", "<script>SELECT %s FROM %s %s</script>"),
-    SELECT_OBJS("selectObjs", "查询满足条件所有数据", "<script>SELECT %s FROM %s %s</script>"),
+    SELECT_BY_MAP("selectByMap", "根据columnMap 查询一条数据", "<script>\nSELECT %s FROM %s %s</script>"),
+    SELECT_BATCH_BY_IDS("selectBatchIds", "根据ID集合,批量查询数据", "<script>\nSELECT %s FROM %s WHERE %s IN (%s)</script>"),
+    SELECT_ONE("selectOne", "查询满足条件一条数据", "<script>\nSELECT %s FROM %s %s</script>"),
+    SELECT_COUNT("selectCount", "查询满足条件总记录数", "<script>\nSELECT COUNT(1) FROM %s %s</script>"),
+    SELECT_LIST("selectList", "查询满足条件所有数据", "<script>\nSELECT %s FROM %s %s</script>"),
+    SELECT_PAGE("selectPage", "查询满足条件所有数据(并翻页)", "<script>\nSELECT %s FROM %s %s</script>"),
+    SELECT_MAPS("selectMaps", "查询满足条件所有数据", "<script>\nSELECT %s FROM %s %s</script>"),
+    SELECT_MAPS_PAGE("selectMapsPage", "查询满足条件所有数据(并翻页)", "<script>\nSELECT %s FROM %s %s</script>"),
+    SELECT_OBJS("selectObjs", "查询满足条件所有数据", "<script>\nSELECT %s FROM %s %s</script>"),
 
 
     /**
     /**
      * 逻辑删除 -> 查询
      * 逻辑删除 -> 查询

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

@@ -87,8 +87,11 @@ public final class SqlScriptUtils {
      * @param otherwise otherwise 内容
      * @param otherwise otherwise 内容
      * @return choose 脚本
      * @return choose 脚本
      */
      */
-    public static String convertChoose(String whenTest, String otherwise) {
-        return StringPool.NEWLINE + "<when test=\"" + whenTest + StringPool.QUOTE + StringPool.RIGHT_CHEV +
-            "</when>" + StringPool.NEWLINE + "<otherwise>" + otherwise + "</otherwise>" + "</choose>";
+    public static String convertChoose(String whenTest, String whenSqlScript, String otherwise) {
+        return StringPool.NEWLINE + "<choose>" + StringPool.NEWLINE +
+            "<when test=\"" + whenTest + StringPool.QUOTE + StringPool.RIGHT_CHEV +
+            whenSqlScript + "</when>" + StringPool.NEWLINE +
+            "<otherwise>" + otherwise + "</otherwise>" + StringPool.NEWLINE +
+            "</choose>" + StringPool.NEWLINE;
     }
     }
 }
 }

+ 17 - 31
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/injector/LogicAbstractMethod.java

@@ -15,13 +15,16 @@
  */
  */
 package com.baomidou.mybatisplus.extension.injector;
 package com.baomidou.mybatisplus.extension.injector;
 
 
-import java.util.List;
-
 import com.baomidou.mybatisplus.core.injector.AbstractMethod;
 import com.baomidou.mybatisplus.core.injector.AbstractMethod;
 import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
 import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
 import com.baomidou.mybatisplus.core.metadata.TableInfo;
 import com.baomidou.mybatisplus.core.metadata.TableInfo;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils;
+
+import java.text.MessageFormat;
+import java.util.List;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -56,7 +59,7 @@ public abstract class LogicAbstractMethod extends AbstractMethod {
                 sql.append(fieldInfo.getColumn());
                 sql.append(fieldInfo.getColumn());
                 if (StringUtils.isCharSequence(fieldInfo.getPropertyType())) {
                 if (StringUtils.isCharSequence(fieldInfo.getPropertyType())) {
                     sql.append("='").append(fieldInfo.getLogicNotDeleteValue()).append(StringPool.SINGLE_QUOTE);
                     sql.append("='").append(fieldInfo.getLogicNotDeleteValue()).append(StringPool.SINGLE_QUOTE);
-                    } else {
+                } else {
                     sql.append(StringPool.EQUALS).append(fieldInfo.getLogicNotDeleteValue());
                     sql.append(StringPool.EQUALS).append(fieldInfo.getLogicNotDeleteValue());
                 }
                 }
             }
             }
@@ -97,34 +100,17 @@ public abstract class LogicAbstractMethod extends AbstractMethod {
     @Override
     @Override
     protected String sqlWhereEntityWrapper(TableInfo table) {
     protected String sqlWhereEntityWrapper(TableInfo table) {
         if (table.isLogicDelete()) {
         if (table.isLogicDelete()) {
-            StringBuilder where = new StringBuilder(128);
-            where.append("<choose><when test=\"ew!=null and !ew.emptyOfWhere\">");
-            where.append("<trim prefix=\"WHERE\" prefixOverrides=\"AND|OR\">");
-            where.append("<if test=\"ew.entity!=null\">");
-            if (StringUtils.isNotEmpty(table.getKeyProperty())) {
-                where.append("<if test=\"ew.entity.").append(table.getKeyProperty()).append("!=null\">");
-                where.append(" AND ").append(table.getKeyColumn()).append("=#{ew.entity.");
-                where.append(table.getKeyProperty()).append(StringPool.RIGHT_BRACE);
-                where.append("</if>");
-            }
-            List<TableFieldInfo> fieldList = table.getFieldList();
-            for (TableFieldInfo fieldInfo : fieldList) {
-                where.append(convertIfTag(fieldInfo, "ew.entity.", false));
-                where.append(" AND ").append(sqlCondition(fieldInfo.getCondition(),
-                    fieldInfo.getColumn(), "ew.entity." + fieldInfo.getEl()));
-                where.append(convertIfTag(fieldInfo, true));
-            }
-            where.append("</if>");
-            // 删除逻辑
-            where.append(getLogicDeleteSql(true, table));
-            // SQL 片段
-            where.append("<if test=\"ew.sqlSegment!=null and ew.sqlSegment!=''\"> AND ${ew.sqlSegment}</if>");
-            where.append("</trim>");
-            where.append("</when><otherwise>WHERE ");
-            // 删除逻辑
-            where.append(getLogicDeleteSql(false, table));
-            where.append("</otherwise></choose>");
-            return where.toString();
+            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 + SqlScriptUtils.convertIf(String.format(" AND ${%s}",
+                Constants.WRAPPER_SQLSEGMENT),
+                MessageFormat.format("{0} != null and {0} != ''", 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));
+            return sqlScript;
         }
         }
         // 正常逻辑
         // 正常逻辑
         return super.sqlWhereEntityWrapper(table);
         return super.sqlWhereEntityWrapper(table);