Explorar o código

修复参数填充判断错误,标记替换字段常量。

nieqiurong %!s(int64=3) %!d(string=hai) anos
pai
achega
2018076849

+ 9 - 7
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/MybatisParameterHandler.java

@@ -96,6 +96,7 @@ public class MybatisParameterHandler implements ParameterHandler {
             TableInfo tableInfo = null;
             Object entity = parameter;
             if (parameter instanceof Map) {
+                // 处理单参数使用注解标记的时候,尝试提取et来获取实体参数
                 Map<?, ?> map = (Map<?, ?>) parameter;
                 if (map.containsKey(Constants.ENTITY)) {
                     Object et = map.get(Constants.ENTITY);
@@ -188,15 +189,16 @@ public class MybatisParameterHandler implements ParameterHandler {
             parameters = (Collection) parameterObject;
         } else if (parameterObject instanceof Map) {
             Map parameterMap = (Map) parameterObject;
+            // 尝试提取参数进行填充,如果是多参数时,在使用注解时,请注意使用collection,list,array进行声明
             if (parameterMap.containsKey("collection")) {
                 parameters = (Collection) parameterMap.get("collection");
-            } if (parameterMap.containsKey(Constants.COLLECTION)) {
-                // 兼容逻辑删除对象填充
-                parameters = (Collection) parameterMap.get(Constants.COLLECTION);
-            } else if (parameterMap.containsKey("list")) {
-                parameters = (List) parameterMap.get("list");
-            } else if (parameterMap.containsKey("array")) {
-                parameters = Arrays.asList((Object[]) parameterMap.get("array"));
+            } else if (parameterMap.containsKey(Constants.COLL)) {
+                // 兼容逻辑删除对象填充,这里的集合字段后面重构的时候应该和原生保持一致,使用collection
+                parameters = (Collection) parameterMap.get(Constants.COLL);
+            } else if (parameterMap.containsKey(Constants.LIST)) {
+                parameters = (List) parameterMap.get(Constants.LIST);
+            } else if (parameterMap.containsKey(Constants.ARRAY)) {
+                parameters = Arrays.asList((Object[]) parameterMap.get(Constants.ARRAY));
             }
         }
         return parameters;

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

@@ -56,7 +56,7 @@ public class DeleteBatchByIds extends AbstractMethod {
                 SqlScriptUtils.convertForeach(
                     SqlScriptUtils.convertChoose("@org.apache.ibatis.type.SimpleTypeRegistry@isSimpleType(item.getClass())",
                         "#{item}", "#{item." + tableInfo.getKeyProperty() + "}"),
-                    COLLECTION, null, "item", COMMA));
+                    COLL, null, "item", COMMA));
             SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, Object.class);
             return this.addDeleteMappedStatement(mapperClass, getMethod(sqlMethod), sqlSource);
         }
@@ -72,7 +72,7 @@ public class DeleteBatchByIds extends AbstractMethod {
             sqlLogicSet(tableInfo), tableInfo.getKeyColumn(), SqlScriptUtils.convertForeach(
                 SqlScriptUtils.convertChoose("@org.apache.ibatis.type.SimpleTypeRegistry@isSimpleType(item.getClass())",
                     "#{item}", "#{item." + tableInfo.getKeyProperty() + "}"),
-                COLLECTION, null, "item", COMMA),
+                COLL, null, "item", COMMA),
             tableInfo.getLogicDeleteSql(true, true));
     }
 }

+ 1 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectBatchByIds.java

@@ -47,7 +47,7 @@ public class SelectBatchByIds extends AbstractMethod {
         SqlMethod sqlMethod = SqlMethod.SELECT_BATCH_BY_IDS;
         SqlSource sqlSource = languageDriver.createSqlSource(configuration, String.format(sqlMethod.getSql(),
                 sqlSelectColumns(tableInfo, false), tableInfo.getTableName(), tableInfo.getKeyColumn(),
-                SqlScriptUtils.convertForeach("#{item}", COLLECTION, null, "item", COMMA),
+                SqlScriptUtils.convertForeach("#{item}", COLL, null, "item", COMMA),
                 tableInfo.getLogicDeleteSql(true, true)), Object.class);
         return addSelectMappedStatementForTable(mapperClass, getMethod(sqlMethod), sqlSource, tableInfo);
     }

+ 2 - 2
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/mapper/BaseMapper.java

@@ -125,7 +125,7 @@ public interface BaseMapper<T> extends Mapper<T> {
      *
      * @param idList 主键ID列表或实体列表(不能为 null 以及 empty)
      */
-    int deleteBatchIds(@Param(Constants.COLLECTION) Collection<?> idList);
+    int deleteBatchIds(@Param(Constants.COLL) Collection<?> idList);
 
     /**
      * 根据 ID 修改
@@ -154,7 +154,7 @@ public interface BaseMapper<T> extends Mapper<T> {
      *
      * @param idList 主键ID列表(不能为 null 以及 empty)
      */
-    List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
+    List<T> selectBatchIds(@Param(Constants.COLL) Collection<? extends Serializable> idList);
 
     /**
      * 查询(根据 columnMap 条件)

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

@@ -126,8 +126,17 @@ public interface Constants extends StringPool, Serializable {
     String COLUMN_MAP_IS_EMPTY = COLUMN_MAP + DOT + "isEmpty";
     /**
      * collection
+     *
+     * @see #COLL
+     * @deprecated 3.5.2 后面修改成collection
      */
+    @Deprecated
     String COLLECTION = "coll";
+
+    /**
+     * @since 3.5.2
+     */
+    String COLL = "coll";
     /**
      * list
      *
@@ -142,6 +151,11 @@ public interface Constants extends StringPool, Serializable {
      * limit
      */
     String LIMIT = "LIMIT";
+
+    /**
+     * @since 3.5.2
+     */
+    String ARRAY = "array";
     /**
      * order by
      */

+ 2 - 2
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/injector/methods/LogicDeleteBatchByIds.java

@@ -52,14 +52,14 @@ public class LogicDeleteBatchByIds extends DeleteBatchByIds {
             .collect(toList());
         if (CollectionUtils.isNotEmpty(fieldInfos)) {
             String sqlScript = fieldInfos.stream()
-                .map(i -> i.getSqlSet(COLLECTION + "[0].")).collect(joining(EMPTY));
+                .map(i -> i.getSqlSet(COLL + "[0].")).collect(joining(EMPTY));
             String sqlSet = "SET " + SqlScriptUtils.convertIf(sqlScript, "!@org.apache.ibatis.type.SimpleTypeRegistry@isSimpleType(_parameter.getClass())", true)
                 + tableInfo.getLogicDeleteSql(false, false);
             return String.format(sqlMethod.getSql(), tableInfo.getTableName(), sqlSet, tableInfo.getKeyColumn(),
                 SqlScriptUtils.convertForeach(
                     SqlScriptUtils.convertChoose("@org.apache.ibatis.type.SimpleTypeRegistry@isSimpleType(item.getClass())",
                         "#{item}", "#{item." + tableInfo.getKeyProperty() + "}"),
-                    COLLECTION, null, "item", COMMA),
+                    COLL, null, "item", COMMA),
                 tableInfo.getLogicDeleteSql(true, true));
         } else {
             return super.logicDeleteScript(tableInfo, sqlMethod);

+ 1 - 1
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/logicdel/EntityMapper.java

@@ -16,7 +16,7 @@ public interface EntityMapper extends BaseMapper<Entity> {
     @Select("select * from entity where id = #{id}")
     Entity byId(Long id);
 
-    int testDeleteBatch(@Param(Constants.COLLECTION) List<Entity> entityList);
+    int testDeleteBatch(@Param(Constants.COLL) List<Entity> entityList);
 
 
 }