Browse Source

Merge pull request #4177 from nieqiurong/20211226124138

增加LogicDeleteBatchByIds选装注入,去除deleteBatchIds泛型限制.
qmdx 3 years ago
parent
commit
ea06064ed7
29 changed files with 263 additions and 84 deletions
  1. 2 0
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/MybatisParameterHandler.java
  2. 4 4
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/Delete.java
  3. 19 8
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/DeleteBatchByIds.java
  4. 1 1
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/DeleteById.java
  5. 4 4
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/DeleteByMap.java
  6. 4 5
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/Insert.java
  7. 1 1
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectBatchByIds.java
  8. 1 1
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectById.java
  9. 4 4
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectByMap.java
  10. 4 4
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectCount.java
  11. 4 4
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectList.java
  12. 4 4
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectMaps.java
  13. 4 4
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectMapsPage.java
  14. 4 4
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectObjs.java
  15. 4 4
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectOne.java
  16. 4 4
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectPage.java
  17. 4 4
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/Update.java
  18. 4 4
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/UpdateById.java
  19. 2 2
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/mapper/BaseMapper.java
  20. 6 0
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/Constants.java
  21. 5 5
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/injector/methods/AlwaysUpdateSomeColumnById.java
  22. 6 6
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/injector/methods/InsertBatchSomeColumn.java
  23. 71 0
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/injector/methods/LogicDeleteBatchByIds.java
  24. 2 2
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/injector/methods/LogicDeleteByIdWithFill.java
  25. 4 4
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/injector/methods/Upsert.java
  26. 1 1
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/service/IService.java
  27. 3 0
      mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/logicdel/Entity.java
  28. 8 0
      mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/logicdel/EntityMapper.java
  29. 79 0
      mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/logicdel/LogicDelTest.java

+ 2 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/MybatisParameterHandler.java

@@ -190,6 +190,8 @@ public class MybatisParameterHandler implements ParameterHandler {
             Map parameterMap = (Map) parameterObject;
             if (parameterMap.containsKey("collection")) {
                 parameters = (Collection) parameterMap.get("collection");
+            } if (parameterMap.containsKey(Constants.COLLECTION)) { //TODO 下次重构的时候不要在用这种了
+                parameters = (Collection) parameterMap.get(Constants.COLLECTION);
             } else if (parameterMap.containsKey("list")) {
                 parameters = (List) parameterMap.get("list");
             } else if (parameterMap.containsKey("array")) {

+ 4 - 4
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/Delete.java

@@ -28,19 +28,19 @@ import org.apache.ibatis.mapping.SqlSource;
  * @since 2018-04-06
  */
 public class Delete extends AbstractMethod {
-    
+
     public Delete() {
         super("delete");
     }
-    
+
     /**
      * @param name 方法名
-     * @since 3.4.4
+     * @since 3.5.0
      */
     public Delete(String name) {
         super(name);
     }
-    
+
     @Override
     public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
         String sql;

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

@@ -36,7 +36,7 @@ public class DeleteBatchByIds extends AbstractMethod {
 
     /**
      * @param name 方法名
-     * @since 3.4.4
+     * @since 3.5.0
      */
     public DeleteBatchByIds(String name) {
         super(name);
@@ -47,13 +47,7 @@ public class DeleteBatchByIds extends AbstractMethod {
         String sql;
         SqlMethod sqlMethod = SqlMethod.LOGIC_DELETE_BATCH_BY_IDS;
         if (tableInfo.isWithLogicDelete()) {
-            sql = String.format(sqlMethod.getSql(), tableInfo.getTableName(), sqlLogicSet(tableInfo),
-                tableInfo.getKeyColumn(),
-                SqlScriptUtils.convertForeach(
-                    SqlScriptUtils.convertChoose("@org.apache.ibatis.type.SimpleTypeRegistry@isSimpleType(item.getClass())",
-                        "#{item}", "#{item." + tableInfo.getKeyProperty() + "}"),
-                    COLLECTION, null, "item", COMMA),
-                tableInfo.getLogicDeleteSql(true, true));
+            sql = logicDeleteScript(tableInfo);
             SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, Object.class);
             return addUpdateMappedStatement(mapperClass, modelClass, this.name, sqlSource);
         } else {
@@ -67,4 +61,21 @@ public class DeleteBatchByIds extends AbstractMethod {
             return this.addDeleteMappedStatement(mapperClass, this.name, sqlSource);
         }
     }
+
+    /**
+     * @param tableInfo 表信息
+     * @return 逻辑删除脚本
+     * @since 3.5.0
+     */
+    public String logicDeleteScript(TableInfo tableInfo) {
+        SqlMethod sqlMethod = SqlMethod.LOGIC_DELETE_BATCH_BY_IDS;
+        return String.format(sqlMethod.getSql(), tableInfo.getTableName(), sqlLogicSet(tableInfo),
+            tableInfo.getKeyColumn(),
+            SqlScriptUtils.convertForeach(
+                SqlScriptUtils.convertChoose("@org.apache.ibatis.type.SimpleTypeRegistry@isSimpleType(item.getClass())",
+                    "#{item}", "#{item." + tableInfo.getKeyProperty() + "}"),
+                COLLECTION, null, "item", COMMA),
+            tableInfo.getLogicDeleteSql(true, true));
+    }
+
 }

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

@@ -43,7 +43,7 @@ public class DeleteById extends AbstractMethod {
 
     /**
      * @param name 方法名
-     * @since 3.4.4
+     * @since 3.5.0
      */
     public DeleteById(String name) {
         super(name);

+ 4 - 4
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/DeleteByMap.java

@@ -30,19 +30,19 @@ import java.util.Map;
  * @since 2018-04-06
  */
 public class DeleteByMap extends AbstractMethod {
-    
+
     public DeleteByMap() {
         super("deleteByMap");
     }
-    
+
     /**
      * @param name 方法名
-     * @since 3.4.4
+     * @since 3.5.0
      */
     public DeleteByMap(String name) {
         super(name);
     }
-    
+
     @Override
     public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
         String sql;

+ 4 - 5
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/Insert.java

@@ -34,21 +34,20 @@ import org.apache.ibatis.mapping.SqlSource;
  * @author hubin
  * @since 2018-04-06
  */
-@SuppressWarnings("serial")
 public class Insert extends AbstractMethod {
-    
+
     public Insert() {
         super(SqlMethod.INSERT_ONE.getMethod());
     }
-    
+
     /**
      * @param name 方法名
-     * @since 3.4.4
+     * @since 3.5.0
      */
     public Insert(String name) {
         super(name);
     }
-    
+
     @Override
     public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
         KeyGenerator keyGenerator = NoKeyGenerator.INSTANCE;

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

@@ -36,7 +36,7 @@ public class SelectBatchByIds extends AbstractMethod {
 
     /**
      * @param name 方法名
-     * @since 3.4.4
+     * @since 3.5.0
      */
     public SelectBatchByIds(String name) {
         super(name);

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

@@ -36,7 +36,7 @@ public class SelectById extends AbstractMethod {
 
     /**
      * @param name 方法名
-     * @since 3.4.4
+     * @since 3.5.0
      */
     public SelectById(String name) {
         super(name);

+ 4 - 4
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectByMap.java

@@ -30,19 +30,19 @@ import java.util.Map;
  * @since 2018-04-06
  */
 public class SelectByMap extends AbstractMethod {
-    
+
     public SelectByMap() {
         super(SqlMethod.SELECT_BY_MAP.getMethod());
     }
-    
+
     /**
      * @param name 方法名
-     * @since 3.4.4
+     * @since 3.5.0
      */
     public SelectByMap(String name) {
         super(name);
     }
-    
+
     @Override
     public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
         SqlMethod sqlMethod = SqlMethod.SELECT_BY_MAP;

+ 4 - 4
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectCount.java

@@ -28,19 +28,19 @@ import org.apache.ibatis.mapping.SqlSource;
  * @since 2018-04-08
  */
 public class SelectCount extends AbstractMethod {
-    
+
     public SelectCount() {
         super(SqlMethod.SELECT_COUNT.getMethod());
     }
-    
+
     /**
      * @param name 方法名
-     * @since 3.4.4
+     * @since 3.5.0
      */
     public SelectCount(String name) {
         super(name);
     }
-    
+
     @Override
     public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
         SqlMethod sqlMethod = SqlMethod.SELECT_COUNT;

+ 4 - 4
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectList.java

@@ -28,19 +28,19 @@ import org.apache.ibatis.mapping.SqlSource;
  * @since 2018-04-06
  */
 public class SelectList extends AbstractMethod {
-    
+
     public SelectList() {
         super(SqlMethod.SELECT_LIST.getMethod());
     }
-    
+
     /**
      * @param name 方法名
-     * @since 3.4.4
+     * @since 3.5.0
      */
     public SelectList(String name) {
         super(name);
     }
-    
+
     @Override
     public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
         SqlMethod sqlMethod = SqlMethod.SELECT_LIST;

+ 4 - 4
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectMaps.java

@@ -30,19 +30,19 @@ import java.util.Map;
  * @since 2018-04-06
  */
 public class SelectMaps extends AbstractMethod {
-    
+
     public SelectMaps() {
         super(SqlMethod.SELECT_MAPS.getMethod());
     }
-    
+
     /**
      * @param name 方法名
-     * @since 3.4.4
+     * @since 3.5.0
      */
     public SelectMaps(String name) {
         super(name);
     }
-    
+
     @Override
     public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
         SqlMethod sqlMethod = SqlMethod.SELECT_MAPS;

+ 4 - 4
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectMapsPage.java

@@ -30,19 +30,19 @@ import java.util.Map;
  * @since 2018-04-06
  */
 public class SelectMapsPage extends AbstractMethod {
-    
+
     public SelectMapsPage() {
         super(SqlMethod.SELECT_MAPS_PAGE.getMethod());
     }
-    
+
     /**
      * @param name 方法名
-     * @since 3.4.4
+     * @since 3.5.0
      */
     public SelectMapsPage(String name) {
         super(name);
     }
-    
+
     @Override
     public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
         SqlMethod sqlMethod = SqlMethod.SELECT_MAPS_PAGE;

+ 4 - 4
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectObjs.java

@@ -28,19 +28,19 @@ import org.apache.ibatis.mapping.SqlSource;
  * @since 2018-04-06
  */
 public class SelectObjs extends AbstractMethod {
-    
+
     public SelectObjs() {
         super(SqlMethod.SELECT_OBJS.getMethod());
     }
-    
+
     /**
      * @param name 方法名
-     * @since 3.4.4
+     * @since 3.5.0
      */
     public SelectObjs(String name) {
         super(name);
     }
-    
+
     @Override
     public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
         SqlMethod sqlMethod = SqlMethod.SELECT_OBJS;

+ 4 - 4
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectOne.java

@@ -29,19 +29,19 @@ import org.apache.ibatis.mapping.SqlSource;
  */
 @Deprecated
 public class SelectOne extends AbstractMethod {
-    
+
     public SelectOne() {
         super(SqlMethod.SELECT_ONE.getMethod());
     }
-    
+
     /**
      * @param name 方法名
-     * @since 3.4.4
+     * @since 3.5.0
      */
     public SelectOne(String name) {
         super(name);
     }
-    
+
     @Override
     public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
         SqlMethod sqlMethod = SqlMethod.SELECT_ONE;

+ 4 - 4
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectPage.java

@@ -28,19 +28,19 @@ import org.apache.ibatis.mapping.SqlSource;
  * @since 2018-04-06
  */
 public class SelectPage extends AbstractMethod {
-    
+
     public SelectPage() {
         super(SqlMethod.SELECT_PAGE.getMethod());
     }
-    
+
     /**
-     * @since 3.4.4
+     * @since 3.5.0
      * @param name 方法名
      */
     public SelectPage(String name) {
         super(name);
     }
-    
+
     @Override
     public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
         SqlMethod sqlMethod = SqlMethod.SELECT_PAGE;

+ 4 - 4
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/Update.java

@@ -28,19 +28,19 @@ import org.apache.ibatis.mapping.SqlSource;
  * @since 2018-04-06
  */
 public class Update extends AbstractMethod {
-    
+
     public Update() {
         super(SqlMethod.UPDATE.getMethod());
     }
-    
+
     /**
-     * @since 3.4.4
+     * @since 3.5.0
      * @param name 方法名
      */
     public Update(String name) {
         super(name);
     }
-    
+
     @Override
     public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
         SqlMethod sqlMethod = SqlMethod.UPDATE;

+ 4 - 4
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/UpdateById.java

@@ -28,19 +28,19 @@ import org.apache.ibatis.mapping.SqlSource;
  * @since 2018-04-06
  */
 public class UpdateById extends AbstractMethod {
-    
+
     public UpdateById() {
         super(SqlMethod.UPDATE_BY_ID.getMethod());
     }
-    
+
     /**
-     * @since 3.4.4
+     * @since 3.5.0
      * @param name 方法名
      */
     public UpdateById(String name) {
         super(name);
     }
-    
+
     @Override
     public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
         SqlMethod sqlMethod = SqlMethod.UPDATE_BY_ID;

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

@@ -123,9 +123,9 @@ public interface BaseMapper<T> extends Mapper<T> {
     /**
      * 删除(根据ID 批量删除)
      *
-     * @param idList 主键ID列表(不能为 null 以及 empty)
+     * @param idList 主键ID列表或实体列表(不能为 null 以及 empty)
      */
-    int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
+    int deleteBatchIds(@Param(Constants.COLLECTION) Collection<?> idList);
 
     /**
      * 根据 ID 修改

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

@@ -128,6 +128,12 @@ public interface Constants extends StringPool, Serializable {
      * collection
      */
     String COLLECTION = "coll";
+    /**
+     * list
+     *
+     * @since 3.5.0
+     */
+    String LIST = "list";
     /**
      * where
      */

+ 5 - 5
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/injector/methods/AlwaysUpdateSomeColumnById.java

@@ -51,21 +51,21 @@ public class AlwaysUpdateSomeColumnById extends AbstractMethod {
     @Setter
     @Accessors(chain = true)
     private Predicate<TableFieldInfo> predicate;
-    
+
     /**
      * @param name      方法名
      * @param predicate 筛选条件
-     * @since 3.4.4
+     * @since 3.5.0
      */
     public AlwaysUpdateSomeColumnById(String name, Predicate<TableFieldInfo> predicate) {
         super(name);
         this.predicate = predicate;
     }
-    
+
     public AlwaysUpdateSomeColumnById() {
         super("alwaysUpdateSomeColumnById");
     }
-    
+
     /**
      * @param predicate 筛选条件
      */
@@ -73,7 +73,7 @@ public class AlwaysUpdateSomeColumnById extends AbstractMethod {
         super("alwaysUpdateSomeColumnById");
         this.predicate = predicate;
     }
-    
+
     @Override
     public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
         SqlMethod sqlMethod = SqlMethod.UPDATE_BY_ID;

+ 6 - 6
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/injector/methods/InsertBatchSomeColumn.java

@@ -61,21 +61,21 @@ import java.util.function.Predicate;
 
 @SuppressWarnings("serial")
 public class InsertBatchSomeColumn extends AbstractMethod {
-    
+
     /**
      * 字段筛选条件
      */
     @Setter
     @Accessors(chain = true)
     private Predicate<TableFieldInfo> predicate;
-    
+
     /**
      * 默认方法名
      */
     public InsertBatchSomeColumn() {
         super("insertBatchSomeColumn");
     }
-    
+
     /**
      * 默认方法名
      *
@@ -85,17 +85,17 @@ public class InsertBatchSomeColumn extends AbstractMethod {
         super("insertBatchSomeColumn");
         this.predicate = predicate;
     }
-    
+
     /**
      * @param name      方法名
      * @param predicate 字段筛选条件
-     * @since 3.4.4
+     * @since 3.5.0
      */
     public InsertBatchSomeColumn(String name, Predicate<TableFieldInfo> predicate) {
         super(name);
         this.predicate = predicate;
     }
-    
+
     @SuppressWarnings("Duplicates")
     @Override
     public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {

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

@@ -0,0 +1,71 @@
+package com.baomidou.mybatisplus.extension.injector.methods;
+
+import com.baomidou.mybatisplus.core.enums.SqlMethod;
+import com.baomidou.mybatisplus.core.injector.methods.DeleteBatchByIds;
+import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
+import com.baomidou.mybatisplus.core.metadata.TableInfo;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils;
+
+import java.util.List;
+
+import static java.util.stream.Collectors.joining;
+import static java.util.stream.Collectors.toList;
+
+/**
+ * 试验功能,不做太复杂的功能,逻辑删除增加填充功能
+ *
+ * 如果想做的通用点的话,delete的时候如果是主键,在service层转换实体进行删除,这样根据主键删除的也能自动填充
+ *
+ * 如果是逻辑删除且标记有填充字段的情况下,以第一条记录的填充字段为准(一切以当前的时间点为基准,如果无法接受记录记录时间不准确请使用循环删除)
+ * 由于本身SQL更新的限制限,这里记录集合不能为空,也不支持第一条记录删除人是A或者时间是A时间,第二条记录的时间是B时间
+ * update table set (填充字段1,填充字段2,逻辑删除字段) where id in (主键1,主键2,主键3)
+ * 用法:
+ * <pre>
+ *     使用默认deleteBatchIds方法
+ *     注入方法: new LogicDeleteBatchByIds()
+ * </pre>
+ * <pre>
+ * 自定义Mapper方法名:
+ * 注入方法: new LogicDeleteBatchByIds("testDeleteBatch")
+ * 增加Mapper方法: int testDeleteBatch(@Param(Constants.COLLECTION) List<Entity> entityList);
+ * </pre>
+ *
+ * @author nieqiurong
+ * @since 3.5.0
+ */
+public class LogicDeleteBatchByIds extends DeleteBatchByIds {
+
+    public LogicDeleteBatchByIds() {
+        super();
+    }
+
+    public LogicDeleteBatchByIds(String name) {
+        super(name);
+    }
+
+    @Override
+    public String logicDeleteScript(TableInfo tableInfo) {
+        SqlMethod sqlMethod = SqlMethod.LOGIC_DELETE_BATCH_BY_IDS;
+        List<TableFieldInfo> fieldInfos = tableInfo.getFieldList().stream()
+            .filter(TableFieldInfo::isWithUpdateFill)
+            .filter(f -> !f.isLogicDelete())
+            .collect(toList());
+        if (CollectionUtils.isNotEmpty(fieldInfos)) {
+            String sqlScript = fieldInfos.stream()
+                .map(i -> i.getSqlSet(COLLECTION + "[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),
+                tableInfo.getLogicDeleteSql(true, true));
+        } else {
+            return super.logicDeleteScript(tableInfo);
+        }
+    }
+
+
+}

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

@@ -40,7 +40,7 @@ import static java.util.stream.Collectors.toList;
  *
  * @author miemie
  * @since 2018-11-09
- * @deprecated 3.4.4 {@link com.baomidou.mybatisplus.core.injector.methods.DeleteById}
+ * @deprecated 3.5.0 {@link com.baomidou.mybatisplus.core.injector.methods.DeleteById}
  */
 @SuppressWarnings("serial")
 @Deprecated
@@ -52,7 +52,7 @@ public class LogicDeleteByIdWithFill extends AbstractMethod {
 
     /**
      * @param name 方法名
-     * @since 3.4.4
+     * @since 3.5.0
      */
     public LogicDeleteByIdWithFill(String name) {
         super(name);

+ 4 - 4
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/injector/methods/Upsert.java

@@ -33,19 +33,19 @@ import org.apache.ibatis.mapping.SqlSource;
  */
 @SuppressWarnings("serial")
 public class Upsert extends AbstractMethod {
-    
+
     public Upsert() {
         super(SqlMethod.UPSERT_ONE.getMethod());
     }
-    
+
     /**
      * @param name 方法名
-     * @since 3.4.4
+     * @since 3.5.0
      */
     public Upsert(String name) {
         super(name);
     }
-    
+
     @Override
     public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
         KeyGenerator keyGenerator = NoKeyGenerator.INSTANCE;

+ 1 - 1
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/service/IService.java

@@ -142,7 +142,7 @@ public interface IService<T> {
      *
      * @param idList 主键ID列表
      */
-    default boolean removeByIds(Collection<? extends Serializable> idList) {
+    default boolean removeByIds(Collection<?> idList) {
         if (CollectionUtils.isEmpty(idList)) {
             return false;
         }

+ 3 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/logicdel/Entity.java

@@ -19,6 +19,9 @@ public class Entity implements Serializable {
 
     private String name;
 
+    @TableField(fill = FieldFill.UPDATE)
+    private String deleteBy;
+
     @TableField(fill = FieldFill.UPDATE)
     @TableLogic(delval = "true", value = "false")
     private Boolean deleted;

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

@@ -1,7 +1,11 @@
 package com.baomidou.mybatisplus.test.logicdel;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
+import java.util.List;
+
 
 /**
  * @author miemie
@@ -11,4 +15,8 @@ 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);
+
+
 }

+ 79 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/logicdel/LogicDelTest.java

@@ -1,9 +1,18 @@
 package com.baomidou.mybatisplus.test.logicdel;
 
+import com.baomidou.mybatisplus.core.config.GlobalConfig;
+import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
+import com.baomidou.mybatisplus.core.injector.AbstractMethod;
+import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
+import com.baomidou.mybatisplus.core.metadata.TableInfo;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.injector.methods.LogicDeleteBatchByIds;
 import com.baomidou.mybatisplus.test.BaseDbTest;
+import org.apache.ibatis.reflection.MetaObject;
+import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
@@ -41,6 +50,49 @@ public class LogicDelTest extends BaseDbTest<EntityMapper> {
             mapper.insert(entity);
             assertThat(mapper.deleteById(entity)).isEqualTo(1);
         });
+
+        doTest(mapper -> {
+            Entity entity1 = new Entity();
+            entity1.setName("测试根据实体主键批量删除");
+            mapper.insert(entity1);
+            Entity entity2 = new Entity();
+            entity2.setName("测试根据实体主键批量删除");
+            mapper.insert(entity2);
+            assertThat(mapper.deleteBatchIds(Arrays.asList(entity1.getId(), entity2.getId()))).isEqualTo(2);
+        });
+
+        doTest(mapper -> {
+            Entity entity1 = new Entity();
+            entity1.setName("测试根据实体批量删除");
+            mapper.insert(entity1);
+            Entity entity2 = new Entity();
+            entity2.setName("测试根据实体批量删除");
+            mapper.insert(entity2);
+            List<Entity> entityList = new ArrayList<>();
+            entityList.add(entity1);
+            entityList.add(entity2);
+            assertThat(mapper.deleteBatchIds(entityList)).isEqualTo(2);
+            entityList.forEach(entity -> {
+                Assertions.assertEquals("聂秋秋", entity.getDeleteBy());
+            });
+        });
+
+        doTest(mapper -> {
+            Entity entity1 = new Entity();
+            entity1.setName("测试自定义方法根据实体批量删除");
+            mapper.insert(entity1);
+            Entity entity2 = new Entity();
+            entity2.setName("测试自定义方法根据实体批量删除");
+            mapper.insert(entity2);
+            List<Entity> entityList = new ArrayList<>();
+            entityList.add(entity1);
+            entityList.add(entity2);
+            assertThat(mapper.testDeleteBatch(entityList)).isEqualTo(2);
+            entityList.forEach(entity -> {
+                Assertions.assertEquals("聂秋秋", entity.getDeleteBy());
+            });
+        });
+
     }
 
     @Override
@@ -53,7 +105,34 @@ public class LogicDelTest extends BaseDbTest<EntityMapper> {
         return Arrays.asList("drop table if exists entity", "CREATE TABLE IF NOT EXISTS entity (" +
             "id BIGINT NOT NULL," +
             "name VARCHAR(30) NULL DEFAULT NULL," +
+            "delete_by VARCHAR(30) NULL DEFAULT NULL," +
             "deleted BOOLEAN NOT NULL DEFAULT false," +
             "PRIMARY KEY (id))");
     }
+
+    @Override
+    protected GlobalConfig globalConfig() {
+        GlobalConfig globalConfig = super.globalConfig();
+        globalConfig.setMetaObjectHandler(new MetaObjectHandler() {
+
+            @Override
+            public void insertFill(MetaObject metaObject) {
+
+            }
+
+            @Override
+            public void updateFill(MetaObject metaObject) {
+                strictUpdateFill(metaObject, "deleteBy", String.class, "聂秋秋");
+            }
+        });
+        globalConfig.setSqlInjector(new DefaultSqlInjector() {
+            @Override
+            public List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) {
+                List<AbstractMethod> methodList = super.getMethodList(mapperClass, tableInfo);
+                methodList.add(new LogicDeleteBatchByIds("testDeleteBatch"));
+                return methodList;
+            }
+        });
+        return globalConfig;
+    }
 }