Browse Source

添加填充信息

Caratacus 8 years ago
parent
commit
4882da0a4b

+ 69 - 5
src/main/java/com/baomidou/mybatisplus/toolkit/TableInfoHelper.java

@@ -17,9 +17,12 @@ package com.baomidou.mybatisplus.toolkit;
 
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Iterator;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentHashMap;
 
 
 import org.apache.ibatis.builder.MapperBuilderAssistant;
 import org.apache.ibatis.builder.MapperBuilderAssistant;
@@ -43,6 +46,7 @@ import com.baomidou.mybatisplus.annotations.TableName;
 import com.baomidou.mybatisplus.entity.GlobalConfiguration;
 import com.baomidou.mybatisplus.entity.GlobalConfiguration;
 import com.baomidou.mybatisplus.entity.TableFieldInfo;
 import com.baomidou.mybatisplus.entity.TableFieldInfo;
 import com.baomidou.mybatisplus.entity.TableInfo;
 import com.baomidou.mybatisplus.entity.TableInfo;
+import com.baomidou.mybatisplus.enums.FieldFill;
 import com.baomidou.mybatisplus.enums.IdType;
 import com.baomidou.mybatisplus.enums.IdType;
 import com.baomidou.mybatisplus.exceptions.MybatisPlusException;
 import com.baomidou.mybatisplus.exceptions.MybatisPlusException;
 import com.baomidou.mybatisplus.incrementer.IKeyGenerator;
 import com.baomidou.mybatisplus.incrementer.IKeyGenerator;
@@ -63,11 +67,27 @@ public class TableInfoHelper {
      * 缓存反射类表信息
      * 缓存反射类表信息
      */
      */
     private static final Map<String, TableInfo> tableInfoCache = new ConcurrentHashMap<>();
     private static final Map<String, TableInfo> tableInfoCache = new ConcurrentHashMap<>();
+    /**
+     * 自动填充字段信息
+     */
+    private static final Map<FieldFill, Map<Class<?>, Set<String>>> fieldFillMap = new ConcurrentHashMap<>();
     /**
     /**
      * 默认表主键
      * 默认表主键
      */
      */
     private static final String DEFAULT_ID_NAME = "id";
     private static final String DEFAULT_ID_NAME = "id";
 
 
+    /**
+     * <p>
+     * 获取自动填充信息
+     * <p>
+     *
+     * @param fieldFill
+     * @return
+     */
+    public static Map<Class<?>, Set<String>> getFieldFillMap(FieldFill fieldFill) {
+        return fieldFillMap.get(fieldFill);
+    }
+
     /**
     /**
      * <p>
      * <p>
      * 获取实体映射表信息
      * 获取实体映射表信息
@@ -88,11 +108,7 @@ public class TableInfoHelper {
      * @return
      * @return
      */
      */
     public static List<TableInfo> getTableInfos() {
     public static List<TableInfo> getTableInfos() {
-        List<TableInfo> tableInfos = new ArrayList<>();
-        for (Map.Entry<String, TableInfo> entry : tableInfoCache.entrySet()) {
-            tableInfos.add(entry.getValue());
-        }
-        return tableInfos;
+        return new ArrayList<>(tableInfoCache.values());
     }
     }
 
 
     /**
     /**
@@ -195,9 +211,57 @@ public class TableInfoHelper {
          * 注入
          * 注入
 		 */
 		 */
         tableInfoCache.put(clazz.getName(), tableInfo);
         tableInfoCache.put(clazz.getName(), tableInfo);
+        //初始化填充字段缓存信息
+        initFieldFillCache(clazz, tableInfo);
         return tableInfo;
         return tableInfo;
     }
     }
 
 
+    /**
+     * 初始化填充字段缓存信息
+     *
+     * @param clazz
+     * @param tableInfo
+     */
+    private static void initFieldFillCache(Class<?> clazz, TableInfo tableInfo) {
+        List<TableFieldInfo> tableFieldInfos = tableInfo.getFieldList();
+        for (TableFieldInfo tableFieldInfo : tableFieldInfos) {
+            FieldFill fieldFill = tableFieldInfo.getFieldFill();
+            if (null == fieldFill || FieldFill.DEFAULT.equals(fieldFill)) {
+                continue;
+            }
+            switch (fieldFill) {
+                case INSERT:
+                    initFieldFill(FieldFill.INSERT, clazz, tableFieldInfo);
+                    break;
+                case UPDATE:
+                    initFieldFill(FieldFill.UPDATE, clazz, tableFieldInfo);
+                    break;
+                case INSERT_UPDATE:
+                    initFieldFill(FieldFill.INSERT, clazz, tableFieldInfo);
+                    initFieldFill(FieldFill.UPDATE, clazz, tableFieldInfo);
+                    break;
+            }
+        }
+    }
+
+    /**
+     * 初始化填充
+     *
+     * @param fieldFill
+     * @param clazz
+     * @param tableFieldInfo
+     */
+    private static void initFieldFill(FieldFill fieldFill, Class<?> clazz, TableFieldInfo tableFieldInfo) {
+        Map<Class<?>, Set<String>> fillFieldMap = fieldFillMap.get(fieldFill);
+        if (MapUtils.isEmpty(fillFieldMap)) {
+            fillFieldMap = new HashMap<>();
+            fillFieldMap.put(clazz, new TreeSet<String>());
+            fieldFillMap.put(fieldFill, fillFieldMap);
+        }
+        Set<String> properties = fillFieldMap.get(clazz);
+        properties.add(tableFieldInfo.getProperty());
+    }
+
     /**
     /**
      * <p>
      * <p>
      * 判断主键注解是否存在
      * 判断主键注解是否存在