瀏覽代碼

feat: 支持全局逻辑删除字段

小锅盖 5 年之前
父節點
當前提交
66d853694f

+ 4 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/config/GlobalConfig.java

@@ -127,6 +127,10 @@ public class GlobalConfig implements Serializable {
          * 表主键生成器
          */
         private IKeyGenerator keyGenerator;
+        /**
+         * 逻辑删除全局字段 (默认无 设置会自动扫描实体字段)
+         */
+        private String logicDeleteField;
         /**
          * 逻辑删除全局值(默认 1、表示已删除)
          */

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

@@ -15,23 +15,30 @@
  */
 package com.baomidou.mybatisplus.core.metadata;
 
-import com.baomidou.mybatisplus.annotation.*;
+import java.lang.reflect.Field;
+
+import org.apache.ibatis.mapping.ResultMapping;
+import org.apache.ibatis.type.JdbcType;
+import org.apache.ibatis.type.TypeHandler;
+import org.apache.ibatis.type.TypeHandlerRegistry;
+import org.apache.ibatis.type.UnknownTypeHandler;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.SqlCondition;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.Version;
 import com.baomidou.mybatisplus.core.MybatisConfiguration;
 import com.baomidou.mybatisplus.core.config.GlobalConfig;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils;
+
 import lombok.AccessLevel;
 import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.ToString;
-import org.apache.ibatis.mapping.ResultMapping;
-import org.apache.ibatis.type.JdbcType;
-import org.apache.ibatis.type.TypeHandler;
-import org.apache.ibatis.type.TypeHandlerRegistry;
-import org.apache.ibatis.type.UnknownTypeHandler;
-
-import java.lang.reflect.Field;
 
 /**
  * 数据库表字段反射信息
@@ -274,6 +281,13 @@ public class TableFieldInfo implements Constants {
                 this.logicDeleteValue = dbConfig.getLogicDeleteValue();
             }
             return true;
+        } else {
+            String globalLogicDeleteField = dbConfig.getLogicDeleteField();
+            if (StringUtils.isNotEmpty(globalLogicDeleteField) && globalLogicDeleteField.equalsIgnoreCase(field.getName())) {
+                this.logicNotDeleteValue = dbConfig.getLogicNotDeleteValue();
+                this.logicDeleteValue = dbConfig.getLogicDeleteValue();
+                return true;
+            }
         }
         return false;
     }
@@ -421,7 +435,7 @@ public class TableFieldInfo implements Constants {
      */
     ResultMapping getResultMapping(final MybatisConfiguration configuration) {
         ResultMapping.Builder builder = new ResultMapping.Builder(configuration, property,
-            StringUtils.getTargetColumn(column), propertyType);
+                StringUtils.getTargetColumn(column), propertyType);
         TypeHandlerRegistry registry = configuration.getTypeHandlerRegistry();
         if (jdbcType != null && jdbcType != JdbcType.UNDEFINED) {
             builder.jdbcType(jdbcType);
@@ -454,7 +468,7 @@ public class TableFieldInfo implements Constants {
         }
         if (fieldStrategy == FieldStrategy.NOT_EMPTY && isCharSequence) {
             return SqlScriptUtils.convertIf(sqlScript, String.format("%s != null and %s != ''", property, property),
-                false);
+                    false);
         }
         return SqlScriptUtils.convertIf(sqlScript, String.format("%s != null", property), false);
     }