Sfoglia il codice sorgente

支持过滤父类属性功能

hubin 5 anni fa
parent
commit
5f64e14391

+ 24 - 14
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/ReflectionKit.java

@@ -198,16 +198,25 @@ public class ReflectionKit {
      */
      */
     public static List<Field> doGetFieldList(Class<?> clazz) {
     public static List<Field> doGetFieldList(Class<?> clazz) {
         if (clazz.getSuperclass() != null) {
         if (clazz.getSuperclass() != null) {
-            List<Field> fieldList = Stream.of(clazz.getDeclaredFields())
-                /* 过滤静态属性 */
-                .filter(field -> !Modifier.isStatic(field.getModifiers()))
-                /* 过滤 transient关键字修饰的属性 */
-                .filter(field -> !Modifier.isTransient(field.getModifiers()))
-                .collect(toCollection(LinkedList::new));
-            /* 处理父类字段 */
-            Class<?> superClass = clazz.getSuperclass();
             /* 排除重载属性 */
             /* 排除重载属性 */
-            return excludeOverrideSuperField(fieldList, getFieldList(superClass));
+            Map<String, Field> fieldMap = excludeOverrideSuperField(clazz.getDeclaredFields(),
+                /* 处理父类字段 */
+                getFieldList(clazz.getSuperclass()));
+            List<Field> fieldList = new ArrayList<>();
+            /*
+             * 重写父类属性过滤后处理忽略部分,支持过滤父类属性功能
+             * 场景:中间表不需要记录创建时间,忽略父类 createTime 公共属性
+             * 中间表实体重写父类属性 ` private transient Date createTime; `
+             */
+            fieldMap.forEach((k, v) -> {
+                /* 过滤静态属性 */
+                if (!Modifier.isStatic(v.getModifiers())
+                    /* 过滤 transient关键字修饰的属性 */
+                    && !Modifier.isTransient(v.getModifiers())) {
+                    fieldList.add(v);
+                }
+            });
+            return fieldList;
         } else {
         } else {
             return Collections.emptyList();
             return Collections.emptyList();
         }
         }
@@ -218,14 +227,15 @@ public class ReflectionKit {
      * 排序重置父类属性
      * 排序重置父类属性
      * </p>
      * </p>
      *
      *
-     * @param fieldList      子类属性
+     * @param fields         子类属性
      * @param superFieldList 父类属性
      * @param superFieldList 父类属性
      */
      */
-    public static List<Field> excludeOverrideSuperField(List<Field> fieldList, List<Field> superFieldList) {
+    public static Map<String, Field> excludeOverrideSuperField(Field[] fields, List<Field> superFieldList) {
         // 子类属性
         // 子类属性
-        Map<String, Field> fieldMap = fieldList.stream().collect(toMap(Field::getName, identity()));
-        superFieldList.stream().filter(field -> !fieldMap.containsKey(field.getName())).forEach(fieldList::add);
-        return fieldList;
+        Map<String, Field> fieldMap = Stream.of(fields).collect(toMap(Field::getName, identity()));
+        superFieldList.stream().filter(field -> !fieldMap.containsKey(field.getName()))
+            .forEach(f -> fieldMap.put(f.getName(), f));
+        return fieldMap;
     }
     }
 
 
     /**
     /**