Explorar el Código

代码优化,常量替换字符串,大量使用常量的类实现常量接口

miemie hace 6 años
padre
commit
8f0677687b

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

@@ -18,7 +18,6 @@ package com.baomidou.mybatisplus.core.injector;
 import com.baomidou.mybatisplus.core.metadata.TableInfo;
 import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
-import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.core.toolkit.TableInfoHelper;
 import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils;
 import org.apache.ibatis.builder.MapperBuilderAssistant;
@@ -44,7 +43,7 @@ import java.lang.reflect.WildcardType;
  * @author hubin
  * @since 2018-04-06
  */
-public abstract class AbstractMethod {
+public abstract class AbstractMethod implements Constants {
 
     protected Configuration configuration;
     protected LanguageDriver languageDriver;
@@ -119,9 +118,9 @@ public abstract class AbstractMethod {
     protected String sqlSet(boolean logic, boolean ew, TableInfo table, String prefix) {
         String sqlScript = table.getAllSqlSet(logic, prefix);
         if (ew) {
-            sqlScript += StringPool.NEWLINE;
-            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 += NEWLINE;
+            sqlScript += SqlScriptUtils.convertIf(SqlScriptUtils.unSafeParam(U_WRAPPER_SQL_SET),
+                String.format("%s != null and %s != null", WRAPPER, U_WRAPPER_SQL_SET), false);
         }
         sqlScript = SqlScriptUtils.convertSet(sqlScript);
         return sqlScript;
@@ -138,7 +137,7 @@ public abstract class AbstractMethod {
      */
     protected String sqlSelectColumns(TableInfo table, boolean queryWrapper) {
         /* 假设存在 resultMap 映射返回 */
-        String selectColumns = StringPool.ASTERISK;
+        String selectColumns = ASTERISK;
         if (table.getResultMap() == null) {
             /* 普通查询 */
             selectColumns = table.getAllSqlSelect();
@@ -146,9 +145,8 @@ public abstract class AbstractMethod {
         if (!queryWrapper) {
             return selectColumns;
         }
-        return SqlScriptUtils.convertChoose(String.format("%s != null and %s != null",
-            Constants.WRAPPER, Constants.Q_WRAPPER_SQL_SELECT),
-            SqlScriptUtils.unSafeParam(Constants.Q_WRAPPER_SQL_SELECT), selectColumns);
+        return SqlScriptUtils.convertChoose(String.format("%s != null and %s != null", WRAPPER, Q_WRAPPER_SQL_SELECT),
+            SqlScriptUtils.unSafeParam(Q_WRAPPER_SQL_SELECT), selectColumns);
     }
 
     /**
@@ -159,9 +157,8 @@ public abstract class AbstractMethod {
      * @param table 表信息
      */
     protected String sqlSelectObjsColumns(TableInfo table) {
-        return SqlScriptUtils.convertChoose(String.format("%s != null and %s != null",
-            Constants.WRAPPER, Constants.Q_WRAPPER_SQL_SELECT),
-            SqlScriptUtils.unSafeParam(Constants.Q_WRAPPER_SQL_SELECT), table.getAllSqlSelect());
+        return SqlScriptUtils.convertChoose(String.format("%s != null and %s != null", WRAPPER, Q_WRAPPER_SQL_SELECT),
+            SqlScriptUtils.unSafeParam(Q_WRAPPER_SQL_SELECT), table.getAllSqlSelect());
     }
 
     /**
@@ -172,10 +169,10 @@ public abstract class AbstractMethod {
     protected String sqlWhereByMap(TableInfo table) {
         String sqlScript = SqlScriptUtils.convertChoose("v == null", " ${k} IS NULL ",
             " ${k} = #{v} ");
-        sqlScript = SqlScriptUtils.convertForeach(sqlScript, Constants.COLUMN_MAP, "k", "v", "AND");
+        sqlScript = SqlScriptUtils.convertForeach(sqlScript, COLUMN_MAP, "k", "v", "AND");
         sqlScript = SqlScriptUtils.convertWhere(sqlScript);
-        sqlScript = SqlScriptUtils.convertIf(sqlScript,
-            String.format("%s != null and !%s", Constants.COLUMN_MAP, Constants.COLUMN_MAP_IS_EMPTY), true);
+        sqlScript = SqlScriptUtils.convertIf(sqlScript, String.format("%s != null and !%s", COLUMN_MAP,
+            COLUMN_MAP_IS_EMPTY), true);
         return sqlScript;
     }
 
@@ -189,63 +186,64 @@ public abstract class AbstractMethod {
      * @return String
      */
     protected String sqlWhereEntityWrapper(boolean newLine, TableInfo table) {
-        String sqlScript = table.getAllSqlWhere(false, true, Constants.WRAPPER_ENTITY_SPOT);
-        sqlScript = SqlScriptUtils.convertIf(sqlScript, String.format("%s != null", Constants.WRAPPER_ENTITY), true);
-        sqlScript += StringPool.NEWLINE;
-        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.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),
-            true);
-        sqlScript = SqlScriptUtils.convertIf(sqlScript, "ew != null", true);
-        return newLine ? StringPool.NEWLINE + sqlScript : sqlScript;
+        String sqlScript = table.getAllSqlWhere(false, true, WRAPPER_ENTITY_SPOT);
+        sqlScript = SqlScriptUtils.convertIf(sqlScript, String.format("%s != null", WRAPPER_ENTITY), true);
+        sqlScript += NEWLINE;
+        sqlScript += SqlScriptUtils.convertIf(String.format("AND ${%s}", WRAPPER_SQLSEGMENT),
+            String.format("%s != null and %s != '' and %s", WRAPPER_SQLSEGMENT, WRAPPER_SQLSEGMENT,
+                WRAPPER_NONEMPTYOFWHERE), true);
+        sqlScript = SqlScriptUtils.convertWhere(sqlScript) + NEWLINE;
+        sqlScript += SqlScriptUtils.convertIf(String.format(" ${%s}", WRAPPER_SQLSEGMENT),
+            String.format("%s != null and %s != '' and %s", WRAPPER_SQLSEGMENT, WRAPPER_SQLSEGMENT,
+                WRAPPER_EMPTYOFWHERE), true);
+        sqlScript = SqlScriptUtils.convertIf(sqlScript, String.format("%s != null", WRAPPER), true);
+        return newLine ? NEWLINE + sqlScript : sqlScript;
     }
 
     /**
      * 查询
      */
-    protected MappedStatement addSelectMappedStatement(Class<?> mapperClass, String id, SqlSource sqlSource, Class<?> resultType,
-                                                       TableInfo table) {
+    protected MappedStatement addSelectMappedStatement(Class<?> mapperClass, String id, SqlSource sqlSource,
+                                                       Class<?> resultType, TableInfo table) {
         if (null != table) {
             String resultMap = table.getResultMap();
             if (null != resultMap) {
                 /* 返回 resultMap 映射结果集 */
-                return addMappedStatement(mapperClass, id, sqlSource, SqlCommandType.SELECT, null, resultMap, null,
-                    new NoKeyGenerator(), null, null);
+                return addMappedStatement(mapperClass, id, sqlSource, SqlCommandType.SELECT, null,
+                    resultMap, null, new NoKeyGenerator(), null, null);
             }
         }
 
         /* 普通查询 */
-        return addMappedStatement(mapperClass, id, sqlSource, SqlCommandType.SELECT, null, null, resultType,
-            new NoKeyGenerator(), null, null);
+        return addMappedStatement(mapperClass, id, sqlSource, SqlCommandType.SELECT, null,
+            null, resultType, new NoKeyGenerator(), null, null);
     }
 
     /**
      * 插入
      */
-    protected MappedStatement addInsertMappedStatement(Class<?> mapperClass, Class<?> modelClass, String id, SqlSource sqlSource,
-                                                       KeyGenerator keyGenerator, String keyProperty, String keyColumn) {
-        return addMappedStatement(mapperClass, id, sqlSource, SqlCommandType.INSERT, modelClass, null, Integer.class,
-            keyGenerator, keyProperty, keyColumn);
+    protected MappedStatement addInsertMappedStatement(Class<?> mapperClass, Class<?> modelClass, String id,
+                                                       SqlSource sqlSource, KeyGenerator keyGenerator,
+                                                       String keyProperty, String keyColumn) {
+        return addMappedStatement(mapperClass, id, sqlSource, SqlCommandType.INSERT, modelClass, null,
+            Integer.class, keyGenerator, keyProperty, keyColumn);
     }
 
     /**
      * 删除
      */
     protected MappedStatement addDeleteMappedStatement(Class<?> mapperClass, String id, SqlSource sqlSource) {
-        return addMappedStatement(mapperClass, id, sqlSource, SqlCommandType.DELETE, null, null, Integer.class,
-            new NoKeyGenerator(), null, null);
+        return addMappedStatement(mapperClass, id, sqlSource, SqlCommandType.DELETE, null,
+            null, Integer.class, new NoKeyGenerator(), null, null);
     }
 
     /**
      * 更新
      */
-    protected MappedStatement addUpdateMappedStatement(Class<?> mapperClass, Class<?> modelClass, String id, SqlSource sqlSource) {
-        return addMappedStatement(mapperClass, id, sqlSource, SqlCommandType.UPDATE, modelClass, null, Integer.class,
-            new NoKeyGenerator(), null, null);
+    protected MappedStatement addUpdateMappedStatement(Class<?> mapperClass, Class<?> modelClass, String id,
+                                                       SqlSource sqlSource) {
+        return addMappedStatement(mapperClass, id, sqlSource, SqlCommandType.UPDATE, modelClass, null,
+            Integer.class, new NoKeyGenerator(), null, null);
     }
 
     /**
@@ -255,9 +253,9 @@ public abstract class AbstractMethod {
                                                  SqlCommandType sqlCommandType, Class<?> parameterClass,
                                                  String resultMap, Class<?> resultType, KeyGenerator keyGenerator,
                                                  String keyProperty, String keyColumn) {
-        String statementName = mapperClass.getName() + StringPool.DOT + id;
+        String statementName = mapperClass.getName() + DOT + id;
         if (hasMappedStatement(statementName)) {
-            System.err.println(StringPool.LEFT_BRACE + statementName + "} Has been loaded by XML or SqlProvider, ignoring the injection of the SQL.");
+            System.err.println(LEFT_BRACE + statementName + "} Has been loaded by XML or SqlProvider, ignoring the injection of the SQL.");
             return null;
         }
         /* 缓存逻辑处理 */
@@ -265,8 +263,9 @@ public abstract class AbstractMethod {
         if (sqlCommandType == SqlCommandType.SELECT) {
             isSelect = true;
         }
-        return builderAssistant.addMappedStatement(id, sqlSource, StatementType.PREPARED, sqlCommandType, null, null, null,
-            parameterClass, resultMap, resultType, null, !isSelect, isSelect, false, keyGenerator, keyProperty, keyColumn,
+        return builderAssistant.addMappedStatement(id, sqlSource, StatementType.PREPARED, sqlCommandType,
+            null, null, null, parameterClass, resultMap, resultType,
+            null, !isSelect, isSelect, false, keyGenerator, keyProperty, keyColumn,
             configuration.getDatabaseId(), languageDriver, null);
     }
 

+ 9 - 9
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/metadata/TableFieldInfo.java

@@ -17,7 +17,7 @@ package com.baomidou.mybatisplus.core.metadata;
 
 import com.baomidou.mybatisplus.annotation.*;
 import com.baomidou.mybatisplus.core.config.GlobalConfig;
-import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.TableInfoHelper;
 import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils;
@@ -36,7 +36,7 @@ import java.lang.reflect.Field;
  * @since 2016-09-09
  */
 @Getter
-public class TableFieldInfo {
+public class TableFieldInfo implements Constants {
 
     /**
      * 是否有存在字段名与属性名关联
@@ -246,8 +246,8 @@ public class TableFieldInfo {
      * @return sql 脚本片段
      */
     public String getInsertSqlProperty(boolean isAll, final String prefix) {
-        final String newPrefix = prefix == null ? StringPool.EMPTY : prefix;
-        String sqlScript = SqlScriptUtils.safeParam(newPrefix + el) + StringPool.COMMA;
+        final String newPrefix = prefix == null ? EMPTY : prefix;
+        String sqlScript = SqlScriptUtils.safeParam(newPrefix + el) + COMMA;
         if (isAll || fieldFill == FieldFill.INSERT || fieldFill == FieldFill.INSERT_UPDATE) {
             return sqlScript;
         }
@@ -262,7 +262,7 @@ public class TableFieldInfo {
      * @return sql 脚本片段
      */
     public String getInsertSqlColumn(boolean isAll) {
-        final String sqlScript = column + StringPool.COMMA;
+        final String sqlScript = column + COMMA;
         if (isAll || fieldFill == FieldFill.INSERT || fieldFill == FieldFill.INSERT_UPDATE) {
             return sqlScript;
         }
@@ -276,15 +276,15 @@ public class TableFieldInfo {
      * @return sql 脚本片段
      */
     public String getSqlSet(final String prefix) {
-        final String newPrefix = prefix == null ? StringPool.EMPTY : prefix;
+        final String newPrefix = prefix == null ? EMPTY : prefix;
         // 默认: column=
-        String sqlSet = column + StringPool.EQUALS;
+        String sqlSet = column + EQUALS;
         if (StringUtils.isNotEmpty(update)) {
             sqlSet += String.format(update, column);
         } else {
             sqlSet += SqlScriptUtils.safeParam(newPrefix + el);
         }
-        sqlSet += StringPool.COMMA;
+        sqlSet += COMMA;
         if (fieldFill == FieldFill.UPDATE || fieldFill == FieldFill.INSERT_UPDATE) {
             // 不进行 if 包裹
             return sqlSet;
@@ -299,7 +299,7 @@ public class TableFieldInfo {
      * @return sql 脚本片段
      */
     public String getSqlWhere(final String prefix) {
-        final String newPrefix = prefix == null ? StringPool.EMPTY : prefix;
+        final String newPrefix = prefix == null ? EMPTY : prefix;
         // 默认:  AND column=#{prefix + el}
         String sqlScript = " AND " + String.format(condition, column, newPrefix + el);
         // 查询的时候只判非空

+ 25 - 26
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/metadata/TableInfo.java

@@ -19,8 +19,8 @@ import com.baomidou.mybatisplus.annotation.DbType;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.KeySequence;
 import com.baomidou.mybatisplus.core.toolkit.Assert;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils;
 import com.baomidou.mybatisplus.core.toolkit.sql.SqlUtils;
@@ -45,7 +45,7 @@ import static java.util.stream.Collectors.joining;
  */
 @Data
 @Accessors(chain = true)
-public class TableInfo {
+public class TableInfo implements Constants {
 
     /**
      * 表主键ID 类型
@@ -124,7 +124,7 @@ public class TableInfo {
      * @return SQL Statement
      */
     public String getSqlStatement(String sqlMethod) {
-        return currentNamespace + StringPool.DOT + sqlMethod;
+        return currentNamespace + DOT + sqlMethod;
     }
 
     public void setConfigMark(Configuration configuration) {
@@ -155,7 +155,7 @@ public class TableInfo {
                 sqlSelect = SqlUtils.sqlWordConvert(dbType, keyColumn, true);
             }
         } else {
-            sqlSelect = StringPool.EMPTY;
+            sqlSelect = EMPTY;
         }
         return sqlSelect;
     }
@@ -182,9 +182,9 @@ public class TableInfo {
     public String chooseSelect(Predicate<TableFieldInfo> predicate) {
         String sqlSelect = getKeySqlSelect();
         String fieldsSqlSelect = fieldList.stream().filter(predicate)
-            .map(i -> i.getSqlSelect(dbType)).collect(joining(StringPool.COMMA));
+            .map(i -> i.getSqlSelect(dbType)).collect(joining(COMMA));
         if (StringUtils.isNotEmpty(sqlSelect) && StringUtils.isNotEmpty(fieldsSqlSelect)) {
-            return sqlSelect + StringPool.COMMA + fieldsSqlSelect;
+            return sqlSelect + COMMA + fieldsSqlSelect;
         } else if (StringUtils.isNotEmpty(fieldsSqlSelect)) {
             return fieldsSqlSelect;
         }
@@ -199,14 +199,14 @@ public class TableInfo {
      * @return sql 脚本片段
      */
     public String getKeyInsertSqlProperty(final String prefix) {
-        final String newPrefix = prefix == null ? StringPool.EMPTY : prefix;
+        final String newPrefix = prefix == null ? EMPTY : prefix;
         if (StringUtils.isNotEmpty(keyProperty)) {
             if (idType == IdType.AUTO) {
-                return StringPool.EMPTY;
+                return EMPTY;
             }
-            return SqlScriptUtils.safeParam(newPrefix + keyProperty) + StringPool.COMMA + StringPool.NEWLINE;
+            return SqlScriptUtils.safeParam(newPrefix + keyProperty) + COMMA + NEWLINE;
         }
-        return StringPool.EMPTY;
+        return EMPTY;
     }
 
     /**
@@ -219,11 +219,11 @@ public class TableInfo {
     public String getKeyInsertSqlColumn() {
         if (StringUtils.isNotEmpty(keyColumn)) {
             if (idType == IdType.AUTO) {
-                return StringPool.EMPTY;
+                return EMPTY;
             }
-            return keyColumn + StringPool.COMMA + StringPool.NEWLINE;
+            return keyColumn + COMMA + NEWLINE;
         }
-        return StringPool.EMPTY;
+        return EMPTY;
     }
 
 
@@ -235,9 +235,9 @@ public class TableInfo {
      * @return sql 脚本片段
      */
     public String getAllInsertSqlProperty(boolean isAll, final String prefix) {
-        final String newPrefix = prefix == null ? StringPool.EMPTY : prefix;
+        final String newPrefix = prefix == null ? EMPTY : prefix;
         return getKeyInsertSqlProperty(newPrefix) + fieldList.stream()
-            .map(i -> i.getInsertSqlProperty(isAll, newPrefix)).collect(joining(StringPool.NEWLINE));
+            .map(i -> i.getInsertSqlProperty(isAll, newPrefix)).collect(joining(NEWLINE));
     }
 
     /**
@@ -249,7 +249,7 @@ public class TableInfo {
      */
     public String getAllInsertSqlColumn(boolean isAll) {
         return getKeyInsertSqlColumn() + fieldList.stream().map(i -> i.getInsertSqlColumn(isAll))
-            .collect(joining(StringPool.NEWLINE));
+            .collect(joining(NEWLINE));
     }
 
     /**
@@ -261,7 +261,7 @@ public class TableInfo {
      * @return sql 脚本片段
      */
     public String getAllSqlWhere(boolean ignoreLogicDelFiled, boolean withId, final String prefix) {
-        final String newPrefix = prefix == null ? StringPool.EMPTY : prefix;
+        final String newPrefix = prefix == null ? EMPTY : prefix;
         String filedSqlScript = fieldList.stream()
             .filter(i -> {
                 if (ignoreLogicDelFiled) {
@@ -269,14 +269,14 @@ public class TableInfo {
                 }
                 return true;
             })
-            .map(i -> i.getSqlWhere(newPrefix)).collect(joining(StringPool.NEWLINE));
+            .map(i -> i.getSqlWhere(newPrefix)).collect(joining(NEWLINE));
         if (!withId || StringUtils.isEmpty(keyProperty)) {
             return filedSqlScript;
         }
         String newKeyProperty = newPrefix + keyProperty;
-        String keySqlScript = keyColumn + StringPool.EQUALS + SqlScriptUtils.safeParam(newKeyProperty);
-        return SqlScriptUtils.convertIf(keySqlScript, String.format("%s != null", newKeyProperty), false) +
-            StringPool.NEWLINE + filedSqlScript;
+        String keySqlScript = keyColumn + EQUALS + SqlScriptUtils.safeParam(newKeyProperty);
+        return SqlScriptUtils.convertIf(keySqlScript, String.format("%s != null", newKeyProperty), false)
+            + NEWLINE + filedSqlScript;
     }
 
     /**
@@ -287,15 +287,14 @@ public class TableInfo {
      * @return sql 脚本片段
      */
     public String getAllSqlSet(boolean ignoreLogicDelFiled, final String prefix) {
-        final String newPrefix = prefix == null ? StringPool.EMPTY : prefix;
+        final String newPrefix = prefix == null ? EMPTY : prefix;
         return fieldList.stream()
             .filter(i -> {
                 if (ignoreLogicDelFiled) {
                     return !(isLogicDelete() && i.isLogicDelete());
                 }
                 return true;
-            })
-            .map(i -> i.getSqlSet(newPrefix)).collect(joining(StringPool.NEWLINE));
+            }).map(i -> i.getSqlSet(newPrefix)).collect(joining(NEWLINE));
     }
 
     /**
@@ -310,13 +309,13 @@ public class TableInfo {
             TableFieldInfo field = fieldList.stream().filter(TableFieldInfo::isLogicDelete).findFirst()
                 .orElseThrow(() -> ExceptionUtils.mpe("can't find the logicFiled from table {%s}", tableName));
             String formatStr = field.isCharSequence() ? "'%s'" : "%s";
-            String logicDeleteSql = field.getColumn() + StringPool.EQUALS +
+            String logicDeleteSql = field.getColumn() + EQUALS +
                 String.format(formatStr, deleteValue ? field.getLogicDeleteValue() : field.getLogicNotDeleteValue());
             if (startWithAnd) {
                 logicDeleteSql = " AND " + logicDeleteSql;
             }
             return logicDeleteSql;
         }
-        return StringPool.EMPTY;
+        return EMPTY;
     }
 }

+ 21 - 13
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/Constants.java

@@ -24,20 +24,12 @@ package com.baomidou.mybatisplus.core.toolkit;
  * @author miemie
  * @since 2018-07-22
  */
-public interface Constants {
+public interface Constants extends StringPool {
 
-    /**
-     * UTF-8
-     */
-    String UTF8 = "UTF-8";
     /**
      * MD5
      */
     String MD5 = "MD5";
-    /**
-     * 一个点
-     */
-    String SPOT = ".";
     /**
      * 实体类
      */
@@ -45,7 +37,7 @@ public interface Constants {
     /**
      * 实体类 带后缀 ==> .
      */
-    String ENTITY_SPOT = ENTITY + SPOT;
+    String ENTITY_SPOT = ENTITY + DOT;
     /**
      * wrapper 类
      */
@@ -53,7 +45,7 @@ public interface Constants {
     /**
      * wrapper 类 带后缀 ==> .
      */
-    String WRAPPER_SPOT = WRAPPER + SPOT;
+    String WRAPPER_SPOT = WRAPPER + DOT;
     /**
      * wrapper 类的属性 entity
      */
@@ -62,10 +54,26 @@ public interface Constants {
      * wrapper 类的属性 sqlSegment
      */
     String WRAPPER_SQLSEGMENT = WRAPPER_SPOT + "sqlSegment";
+    /**
+     * wrapper 类的属性 emptyOfNormal
+     */
+    String WRAPPER_EMPTYOFNORMAL = WRAPPER_SPOT + "emptyOfNormal";
+    /**
+     * wrapper 类的属性 nonEmptyOfNormal
+     */
+    String WRAPPER_NONEMPTYOFNORMAL = WRAPPER_SPOT + "nonEmptyOfNormal";
+    /**
+     * wrapper 类的属性 emptyOfWhere
+     */
+    String WRAPPER_EMPTYOFWHERE = WRAPPER_SPOT + "emptyOfWhere";
+    /**
+     * wrapper 类的判断属性 nonEmptyOfWhere
+     */
+    String WRAPPER_NONEMPTYOFWHERE = WRAPPER_SPOT + "nonEmptyOfWhere";
     /**
      * wrapper 类的属性 entity 带后缀 ==> .
      */
-    String WRAPPER_ENTITY_SPOT = WRAPPER_SPOT + "entity" + SPOT;
+    String WRAPPER_ENTITY_SPOT = WRAPPER_SPOT + "entity" + DOT;
     /**
      * UpdateWrapper 类的属性 sqlSet
      */
@@ -81,7 +89,7 @@ public interface Constants {
     /**
      * columnMap.isEmpty
      */
-    String COLUMN_MAP_IS_EMPTY = COLUMN_MAP + SPOT + "isEmpty";
+    String COLUMN_MAP_IS_EMPTY = COLUMN_MAP + DOT + "isEmpty";
     /**
      * collection
      */

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

@@ -15,7 +15,7 @@
  */
 package com.baomidou.mybatisplus.core.toolkit.sql;
 
-import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 
 /**
@@ -26,7 +26,7 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
  * @author miemie
  * @since 2018-08-15
  */
-public final class SqlScriptUtils {
+public final class SqlScriptUtils implements Constants {
 
     private SqlScriptUtils() {
         // ignore
@@ -43,7 +43,7 @@ public final class SqlScriptUtils {
     public static String convertIf(final String sqlScript, final String ifTest, boolean newLine) {
         String newSqlScript = sqlScript;
         if (newLine) {
-            newSqlScript = StringPool.NEWLINE + newSqlScript + StringPool.NEWLINE;
+            newSqlScript = NEWLINE + newSqlScript + NEWLINE;
         }
         return String.format("<if test=\"%s\">%s</if>", ifTest, newSqlScript);
     }
@@ -64,19 +64,18 @@ public final class SqlScriptUtils {
                                      final String prefixOverrides, final String suffixOverrides) {
         StringBuilder sb = new StringBuilder("<trim");
         if (StringUtils.isNotEmpty(prefix)) {
-            sb.append(" prefix=\"").append(prefix).append(StringPool.QUOTE);
+            sb.append(" prefix=\"").append(prefix).append(QUOTE);
         }
         if (StringUtils.isNotEmpty(suffix)) {
-            sb.append(" suffix=\"").append(suffix).append(StringPool.QUOTE);
+            sb.append(" suffix=\"").append(suffix).append(QUOTE);
         }
         if (StringUtils.isNotEmpty(prefixOverrides)) {
-            sb.append(" prefixOverrides=\"").append(prefixOverrides).append(StringPool.QUOTE);
+            sb.append(" prefixOverrides=\"").append(prefixOverrides).append(QUOTE);
         }
         if (StringUtils.isNotEmpty(suffixOverrides)) {
-            sb.append(" suffixOverrides=\"").append(suffixOverrides).append(StringPool.QUOTE);
+            sb.append(" suffixOverrides=\"").append(suffixOverrides).append(QUOTE);
         }
-        return sb.append(StringPool.RIGHT_CHEV).append(StringPool.NEWLINE).append(sqlScript)
-            .append(StringPool.NEWLINE).append("</trim>").toString();
+        return sb.append(RIGHT_CHEV).append(NEWLINE).append(sqlScript).append(NEWLINE).append("</trim>").toString();
     }
 
     /**
@@ -89,11 +88,11 @@ public final class SqlScriptUtils {
      * @return choose 脚本
      */
     public static String convertChoose(final String whenTest, final String whenSqlScript, final String otherwise) {
-        return "<choose>" + StringPool.NEWLINE +
-            "<when test=\"" + whenTest + StringPool.QUOTE + StringPool.RIGHT_CHEV + StringPool.NEWLINE +
-            whenSqlScript + StringPool.NEWLINE + "</when>" + StringPool.NEWLINE +
-            "<otherwise>" + otherwise + "</otherwise>" + StringPool.NEWLINE +
-            "</choose>";
+        return "<choose>" + NEWLINE
+            + "<when test=\"" + whenTest + QUOTE + RIGHT_CHEV + NEWLINE
+            + whenSqlScript + NEWLINE + "</when>" + NEWLINE
+            + "<otherwise>" + otherwise + "</otherwise>" + NEWLINE
+            + "</choose>";
     }
 
     /**
@@ -112,19 +111,18 @@ public final class SqlScriptUtils {
                                         final String item, final String separator) {
         StringBuilder sb = new StringBuilder("<foreach");
         if (StringUtils.isNotEmpty(collection)) {
-            sb.append(" collection=\"").append(collection).append(StringPool.QUOTE);
+            sb.append(" collection=\"").append(collection).append(QUOTE);
         }
         if (StringUtils.isNotEmpty(index)) {
-            sb.append(" index=\"").append(index).append(StringPool.QUOTE);
+            sb.append(" index=\"").append(index).append(QUOTE);
         }
         if (StringUtils.isNotEmpty(item)) {
-            sb.append(" item=\"").append(item).append(StringPool.QUOTE);
+            sb.append(" item=\"").append(item).append(QUOTE);
         }
         if (StringUtils.isNotEmpty(separator)) {
-            sb.append(" separator=\"").append(separator).append(StringPool.QUOTE);
+            sb.append(" separator=\"").append(separator).append(QUOTE);
         }
-        return sb.append(StringPool.RIGHT_CHEV).append(StringPool.NEWLINE).append(sqlScript)
-            .append(StringPool.NEWLINE).append("</foreach>").toString();
+        return sb.append(RIGHT_CHEV).append(NEWLINE).append(sqlScript).append(NEWLINE).append("</foreach>").toString();
     }
 
     /**
@@ -136,8 +134,9 @@ public final class SqlScriptUtils {
      * @return where 脚本
      */
     public static String convertWhere(final String sqlScript) {
-        return "<where>" + StringPool.NEWLINE + sqlScript + StringPool.NEWLINE + "</where>";
+        return "<where>" + NEWLINE + sqlScript + NEWLINE + "</where>";
     }
+
     /**
      * <p>
      * 生成 set 标签的脚本
@@ -147,7 +146,7 @@ public final class SqlScriptUtils {
      * @return set 脚本
      */
     public static String convertSet(final String sqlScript) {
-        return "<set>" + StringPool.NEWLINE + sqlScript + StringPool.NEWLINE + "</set>";
+        return "<set>" + NEWLINE + sqlScript + NEWLINE + "</set>";
     }
 
     /**
@@ -159,7 +158,7 @@ public final class SqlScriptUtils {
      * @return 脚本
      */
     public static String safeParam(final String param) {
-        return StringPool.HASH_LEFT_BRACE + param + StringPool.RIGHT_BRACE;
+        return HASH_LEFT_BRACE + param + RIGHT_BRACE;
     }
 
     /**
@@ -171,6 +170,6 @@ public final class SqlScriptUtils {
      * @return 脚本
      */
     public static String unSafeParam(final String param) {
-        return StringPool.DOLLAR_LEFT_BRACE + param + StringPool.RIGHT_BRACE;
+        return DOLLAR_LEFT_BRACE + param + RIGHT_BRACE;
     }
 }

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

@@ -17,8 +17,6 @@ package com.baomidou.mybatisplus.extension.injector;
 
 import com.baomidou.mybatisplus.core.injector.AbstractMethod;
 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.sql.SqlScriptUtils;
 
 /**
@@ -52,23 +50,22 @@ public abstract class AbstractLogicMethod extends AbstractMethod {
     @Override
     protected String sqlWhereEntityWrapper(boolean newLine, TableInfo table) {
         if (table.isLogicDelete()) {
-            String sqlScript = table.getAllSqlWhere(true, true, Constants.WRAPPER_ENTITY_SPOT);
-            sqlScript = SqlScriptUtils.convertIf(sqlScript, String.format("%s != null", Constants.WRAPPER_ENTITY),
+            String sqlScript = table.getAllSqlWhere(true, true, WRAPPER_ENTITY_SPOT);
+            sqlScript = SqlScriptUtils.convertIf(sqlScript, String.format("%s != null", WRAPPER_ENTITY),
                 true);
-            sqlScript += (StringPool.NEWLINE + table.getLogicDeleteSql(true, false) +
-                StringPool.NEWLINE);
-            String normalSqlScript = SqlScriptUtils.convertIf(String.format("AND ${%s}", Constants.WRAPPER_SQLSEGMENT),
-                String.format("%s != null and %s != '' and ew.nonEmptyOfNormal", Constants.WRAPPER_SQLSEGMENT,
-                    Constants.WRAPPER_SQLSEGMENT), true);
-            normalSqlScript += StringPool.NEWLINE;
-            normalSqlScript += SqlScriptUtils.convertIf(String.format(" ${%s}", Constants.WRAPPER_SQLSEGMENT),
-                String.format("%s != null and %s != '' and ew.emptyOfNormal", Constants.WRAPPER_SQLSEGMENT,
-                    Constants.WRAPPER_SQLSEGMENT), true);
+            sqlScript += (NEWLINE + table.getLogicDeleteSql(true, false) + NEWLINE);
+            String normalSqlScript = SqlScriptUtils.convertIf(String.format("AND ${%s}", WRAPPER_SQLSEGMENT),
+                String.format("%s != null and %s != '' and %s", WRAPPER_SQLSEGMENT, WRAPPER_SQLSEGMENT,
+                    WRAPPER_NONEMPTYOFNORMAL), true);
+            normalSqlScript += NEWLINE;
+            normalSqlScript += SqlScriptUtils.convertIf(String.format(" ${%s}", WRAPPER_SQLSEGMENT),
+                String.format("%s != null and %s != '' and %s", WRAPPER_SQLSEGMENT, WRAPPER_SQLSEGMENT,
+                    WRAPPER_EMPTYOFNORMAL), true);
             sqlScript += normalSqlScript;
-            sqlScript = SqlScriptUtils.convertChoose("ew!=null", sqlScript,
-                table.getLogicDeleteSql(true, false));
+            sqlScript = SqlScriptUtils.convertChoose(String.format("%s != null", WRAPPER), sqlScript,
+                table.getLogicDeleteSql(false, false));
             sqlScript = SqlScriptUtils.convertWhere(sqlScript);
-            return newLine ? StringPool.NEWLINE + sqlScript : sqlScript;
+            return newLine ? NEWLINE + sqlScript : sqlScript;
         }
         // 正常逻辑
         return super.sqlWhereEntityWrapper(newLine, table);
@@ -82,7 +79,7 @@ public abstract class AbstractLogicMethod extends AbstractMethod {
                 " ${k} = #{v} ");
             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 += (NEWLINE + table.getLogicDeleteSql(true, false));
             sqlScript = SqlScriptUtils.convertWhere(sqlScript);
             return sqlScript;
         }

+ 63 - 23
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/mysql/MysqlTestDataMapperTest.java

@@ -15,7 +15,9 @@ import com.baomidou.mybatisplus.test.base.enums.TestEnum;
 import com.baomidou.mybatisplus.test.base.mapper.commons.CommonDataMapper;
 import com.baomidou.mybatisplus.test.base.mapper.commons.CommonLogicDataMapper;
 import com.baomidou.mybatisplus.test.base.mapper.mysql.MysqlDataMapper;
+import com.baomidou.mybatisplus.test.mysql.config.MysqlDb;
 import org.junit.Assert;
+import org.junit.BeforeClass;
 import org.junit.FixMethodOrder;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -47,14 +49,14 @@ public class MysqlTestDataMapperTest {
     @Resource
     private MysqlDataMapper mysqlMapper;
 
-//    @BeforeClass
-//    public static void init() throws Exception {
-//        MysqlDb.initMysqlData();
-//        System.out.println("init success");
-//    }
+    @BeforeClass
+    public static void init() throws Exception {
+        MysqlDb.initMysqlData();
+        System.out.println("init success");
+    }
 
     @Test
-    public void a_insertForeach() {
+    public void a1_insertForeach() {
         for (int i = 1; i < 20; i++) {
             Long id = (long) i;
             commonMapper.insert(new CommonData().setTestInt(i).setTestStr(String.format("第%s条数据", i)).setId(id)
@@ -64,6 +66,21 @@ public class MysqlTestDataMapperTest {
         }
     }
 
+    @Test
+    public void a2_insertBatch() {
+        List<MysqlData> mysqlDataList = new ArrayList<>();
+        List<CommonData> commonDataList = new ArrayList<>();
+        List<CommonLogicData> commonLogicDataList = new ArrayList<>();
+        for (int i = 0; i < 9; i++) {
+            mysqlDataList.add(new MysqlData().setOrder(i).setGroup(i).setTestStr(i + "条"));
+            commonDataList.add(new CommonData().setTestInt(i).setTestEnum(TestEnum.TWO).setTestStr(i + "条"));
+            commonLogicDataList.add(new CommonLogicData().setTestInt(i).setTestStr(i + "条"));
+        }
+        Assert.assertEquals(9, mysqlMapper.insertBatchAllColumn(mysqlDataList));
+        Assert.assertEquals(9, commonMapper.insertBatchAllColumn(commonDataList));
+        Assert.assertEquals(9, commonLogicMapper.insertBatchAllColumn(commonLogicDataList));
+    }
+
     @Test
     public void b1_deleteById() {
         long id = 1L;
@@ -208,6 +225,46 @@ public class MysqlTestDataMapperTest {
             .lambda().eq(MysqlData::getId, id).eq(MysqlData::getOrder, 10))));
     }
 
+    @Test
+    @SuppressWarnings("unchecked")
+    public void d7_1_selectListForNoLogic() {
+        // 1. 只有 entity
+        MysqlData data = new MysqlData().setOrder(1);
+        Assert.assertTrue(CollectionUtils.isNotEmpty(mysqlMapper.selectList(Condition.create(data))));
+        // 2. 有 entity 也有 where 条件
+        Assert.assertTrue(CollectionUtils.isNotEmpty(mysqlMapper.selectList(Condition.create(data)
+            .lambda().eq(MysqlData::getGroup, 1))));
+        // 3. 有 entity 也有 where 条件 也有 last 条件
+        Assert.assertTrue(CollectionUtils.isNotEmpty(mysqlMapper.selectList(Condition.create(data)
+            .lambda().eq(MysqlData::getGroup, 1).last("limit 1"))));
+        // 4. 有 entity 也有 last 条件
+        Assert.assertTrue(CollectionUtils.isNotEmpty(mysqlMapper.selectList(Condition.create(data)
+            .last("limit 1"))));
+        // 5. 只有 order by 或者 last
+        Assert.assertTrue(CollectionUtils.isNotEmpty(mysqlMapper.selectList(Condition.<MysqlData>create()
+            .lambda().orderByDesc(MysqlData::getOrder).last("limit 1"))));
+    }
+
+    @Test
+    @SuppressWarnings("unchecked")
+    public void d7_2_selectListForLogic() {
+        // 1. 只有 entity
+        CommonLogicData data = new CommonLogicData().setTestInt(11);
+        Assert.assertTrue(CollectionUtils.isNotEmpty(commonLogicMapper.selectList(Condition.create(data))));
+        // 2. 有 entity 也有 where 条件
+        Assert.assertTrue(CollectionUtils.isNotEmpty(commonLogicMapper.selectList(Condition.create(data)
+            .lambda().eq(CommonLogicData::getId, 11))));
+        // 3. 有 entity 也有 where 条件 也有 last 条件
+        Assert.assertTrue(CollectionUtils.isNotEmpty(commonLogicMapper.selectList(Condition.create(data)
+            .lambda().eq(CommonLogicData::getId, 11).last("limit 1"))));
+        // 4. 有 entity 也有 last 条件
+        Assert.assertTrue(CollectionUtils.isNotEmpty(commonLogicMapper.selectList(Condition.create(data)
+            .last("limit 1"))));
+        // 5. 只有 order by 或者 last
+        Assert.assertTrue(CollectionUtils.isNotEmpty(commonLogicMapper.selectList(Condition.<CommonLogicData>create()
+            .lambda().orderByAsc(CommonLogicData::getTestInt).last("limit 1"))));
+    }
+
     @Test
     public void d7_selectPage() {
         Page<CommonData> page = new Page<>(1, 5);
@@ -282,21 +339,4 @@ public class MysqlTestDataMapperTest {
         commonMapper.selectList(Condition.lambda(new CommonData().setTestInt(12)).orderByAsc(CommonData::getCreateDatetime));
         commonLogicMapper.selectList(Condition.lambda(new CommonLogicData().setTestInt(12)).orderByAsc(CommonLogicData::getCreateDatetime));
     }
-
-    @Test
-    public void xxx() {
-        IPage<MysqlData> page = mysqlMapper.selectPage(new Page<>(2, 5, mysqlMapper.selectCount(null)),
-            Condition.<MysqlData>create().gt("`order`", 1).gt("`group`", 2));
-        System.out.println(page.getTotal());
-        System.out.println(page.getRecords().size());
-    }
-
-    @Test
-    public void insertBatch() {
-        List<MysqlData> list = new ArrayList<>();
-        for (int i = 0; i < 9; i++) {
-            list.add(new MysqlData().setOrder(i).setGroup(i).setTestStr(i + "条"));
-        }
-        System.out.println(mysqlMapper.insertBatchAllColumn(list));
-    }
 }