Explorar o código

提供功能,搞定

miemie %!s(int64=6) %!d(string=hai) anos
pai
achega
5e81311009

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

@@ -1,14 +1,24 @@
 package com.baomidou.mybatisplus.extension.injector.methods;
 
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.core.enums.SqlMethod;
+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.StringPool;
 import com.baomidou.mybatisplus.extension.injector.AbstractLogicMethod;
 import org.apache.ibatis.mapping.MappedStatement;
 import org.apache.ibatis.mapping.SqlSource;
 
+import java.util.List;
+
+import static java.util.stream.Collectors.joining;
+import static java.util.stream.Collectors.toList;
+
 /**
  * <p>
  * 根据 id 逻辑删除数据,并带字段填充功能
- * 注意入参是 entity !!! , 非逻辑删除勿用 !!!
+ * 注意入参是 entity !!! ,如果字段没有自动填充,就只是单纯的逻辑删除
  * </p>
  *
  * @author miemie
@@ -22,11 +32,28 @@ public class LogicDeleteByIdWithFill extends AbstractLogicMethod {
 
     @Override
     public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
-        String sqlMethod = "<script>\nUPDATE %s %s WHERE %s=#{%s} %s\n</script>";
-        // todo 没写完
-        String sql = String.format(sqlMethod, tableInfo.getTableName(), sqlLogicSet(tableInfo),
-            tableInfo.getKeyColumn(), tableInfo.getKeyProperty(),
-            tableInfo.getLogicDeleteSql(true, false));
+        String sql;
+        SqlMethod sqlMethod = SqlMethod.LOGIC_DELETE_BY_ID;
+        if (tableInfo.isLogicDelete()) {
+            List<TableFieldInfo> fieldInfos = tableInfo.getFieldList().stream()
+                .filter(i -> i.getFieldFill() == FieldFill.UPDATE || i.getFieldFill() == FieldFill.INSERT_UPDATE)
+                .collect(toList());
+            if (CollectionUtils.isNotEmpty(fieldInfos)) {
+                String sqlSet = "SET " + fieldInfos.stream().map(i -> i.getSqlSet(StringPool.EMPTY))
+                    .collect(joining(StringPool.COMMA));
+                sql = String.format(sqlMethod.getSql(), tableInfo.getTableName(), sqlSet,
+                    tableInfo.getKeyColumn(), tableInfo.getKeyProperty(),
+                    tableInfo.getLogicDeleteSql(true, false));
+            } else {
+                sql = String.format(sqlMethod.getSql(), tableInfo.getTableName(), sqlLogicSet(tableInfo),
+                    tableInfo.getKeyColumn(), tableInfo.getKeyProperty(),
+                    tableInfo.getLogicDeleteSql(true, false));
+            }
+        } else {
+            sqlMethod = SqlMethod.DELETE_BY_ID;
+            sql = String.format(sqlMethod.getSql(), tableInfo.getTableName(), tableInfo.getKeyColumn(),
+                tableInfo.getKeyProperty());
+        }
         SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
         return addUpdateMappedStatement(mapperClass, modelClass, MAPPER_METHOD, sqlSource);
     }