Browse Source

code style

miemie 5 years ago
parent
commit
7593ef5f56

+ 48 - 67
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/handlers/MetaObjectHandler.java

@@ -19,9 +19,7 @@ import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
 import com.baomidou.mybatisplus.core.metadata.TableInfo;
 import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
-import com.baomidou.mybatisplus.core.toolkit.Constants;
 import org.apache.ibatis.reflection.MetaObject;
-import org.apache.ibatis.reflection.SystemMetaObject;
 
 import java.util.Collections;
 import java.util.List;
@@ -30,7 +28,9 @@ import java.util.Optional;
 import java.util.function.Supplier;
 
 /**
- * 元对象字段填充控制器抽象类,实现公共字段自动写入
+ * 元对象字段填充控制器抽象类,实现公共字段自动写入<p>
+ * <p>
+ * 所有入参的 MetaObject 必定是 entity 或其子类的 MetaObject
  *
  * @author hubin
  * @since 2016-08-28
@@ -87,21 +87,22 @@ public interface MetaObjectHandler {
      */
     default MetaObjectHandler setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject) {
         if (Objects.nonNull(fieldVal)) {
-            if (metaObject.hasSetter(fieldName) && metaObject.hasGetter(fieldName)) {
-                metaObject.setValue(fieldName, fieldVal);
-            } else if (metaObject.hasGetter(Constants.ENTITY)) {
-                Object et = metaObject.getValue(Constants.ENTITY);
-                if (et != null) {
-                    MetaObject etMeta = SystemMetaObject.forObject(et);
-                    if (etMeta.hasSetter(fieldName)) {
-                        etMeta.setValue(fieldName, fieldVal);
-                    }
-                }
-            }
+            metaObject.setValue(fieldName, fieldVal);
         }
         return this;
     }
 
+    /**
+     * get value from java bean by propertyName
+     *
+     * @param fieldName  java bean property name
+     * @param metaObject parameter wrapper
+     * @return 字段值
+     */
+    default Object getFieldValByName(String fieldName, MetaObject metaObject) {
+        return metaObject.getValue(fieldName);
+    }
+
     /**
      * insert 时填充,只会填充 fill 被标识为 INSERT 与 INSERT_UPDATE 的字段
      *
@@ -132,7 +133,6 @@ public interface MetaObjectHandler {
 
     /**
      * Common method to set value for java bean.
-     * <p>如果包含前缀 et 使用该方法,否则可以直接 metaObject.setValue(fieldName, fieldVal);</p>
      *
      * @param fieldName  java bean property name
      * @param fieldVal   java bean property value
@@ -143,19 +143,8 @@ public interface MetaObjectHandler {
      */
     @Deprecated
     default MetaObjectHandler setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject, FieldFill fieldFill) {
-        if (Objects.nonNull(fieldVal)) {
-            if (metaObject.hasSetter(fieldName) && metaObject.hasGetter(fieldName)
-                && isFill(fieldName, fieldVal, metaObject, fieldFill)) {
-                metaObject.setValue(fieldName, fieldVal);
-            } else if (metaObject.hasGetter(Constants.ENTITY)) {
-                Object et = metaObject.getValue(Constants.ENTITY);
-                if (et != null) {
-                    MetaObject etMeta = SystemMetaObject.forObject(et);
-                    if (etMeta.hasSetter(fieldName) && isFill(fieldName, fieldVal, etMeta, fieldFill)) {
-                        etMeta.setValue(fieldName, fieldVal);
-                    }
-                }
-            }
+        if (Objects.nonNull(fieldVal) && isFill(fieldName, fieldVal, metaObject, fieldFill)) {
+            metaObject.setValue(fieldName, fieldVal);
         }
         return this;
     }
@@ -178,37 +167,17 @@ public interface MetaObjectHandler {
      */
     @Deprecated
     default boolean isFill(String fieldName, Object fieldVal, MetaObject metaObject, FieldFill fieldFill) {
-        TableInfo tableInfo = findTableInfo(metaObject);
-        if (Objects.nonNull(tableInfo)) {
-            Optional<TableFieldInfo> first = tableInfo.getFieldList().stream()
-                //v_3.1.1+ 设置子类的值也可以通过
-                .filter(e -> e.getProperty().equals(fieldName) && e.getPropertyType().isAssignableFrom(fieldVal.getClass()))
-                .findFirst();
-            if (first.isPresent()) {
-                FieldFill fill = first.get().getFieldFill();
-                return fill.equals(fieldFill) || FieldFill.INSERT_UPDATE.equals(fill);
-            }
+        Optional<TableFieldInfo> first = findTableInfo(metaObject).getFieldList().stream()
+            //v_3.1.1+ 设置子类的值也可以通过
+            .filter(e -> e.getProperty().equals(fieldName) && e.getPropertyType().isAssignableFrom(fieldVal.getClass()))
+            .findFirst();
+        if (first.isPresent()) {
+            FieldFill fill = first.get().getFieldFill();
+            return fill.equals(fieldFill) || FieldFill.INSERT_UPDATE.equals(fill);
         }
         return false;
     }
 
-    /**
-     * get value from java bean by propertyName
-     * <p>如果包含前缀 et 使用该方法,否则可以直接 metaObject.setValue(fieldName, fieldVal);</p>
-     *
-     * @param fieldName  java bean property name
-     * @param metaObject parameter wrapper
-     * @return 字段值
-     */
-    default Object getFieldValByName(String fieldName, MetaObject metaObject) {
-        if (metaObject.hasGetter(fieldName)) {
-            return metaObject.getValue(fieldName);
-        } else if (metaObject.hasGetter(Constants.ENTITY_DOT + fieldName)) {
-            return metaObject.getValue(Constants.ENTITY_DOT + fieldName);
-        }
-        return null;
-    }
-
     /**
      * find the tableInfo cache by metaObject </p>
      * 获取 TableInfo 缓存
@@ -218,9 +187,7 @@ public interface MetaObjectHandler {
      * @since 3.3.0
      */
     default TableInfo findTableInfo(MetaObject metaObject) {
-        return metaObject.hasGetter(Constants.MP_OPTLOCK_ET_ORIGINAL) ?
-            TableInfoHelper.getTableInfo(metaObject.getValue(Constants.MP_OPTLOCK_ET_ORIGINAL).getClass())
-            : TableInfoHelper.getTableInfo(metaObject.getOriginalObject().getClass());
+        return TableInfoHelper.getTableInfo(metaObject.getOriginalObject().getClass());
     }
 
     /**
@@ -282,31 +249,45 @@ public interface MetaObjectHandler {
      * @since 3.3.0
      */
     default MetaObjectHandler strictFill(boolean insertFill, TableInfo tableInfo, MetaObject metaObject, List<StrictFill> strictFills) {
-        if (tableInfo != null && ((insertFill && tableInfo.isWithInsertFill()) || (!insertFill && tableInfo.isWithUpdateFill()))) {
-            List<TableFieldInfo> list = tableInfo.getFieldList();
+        if ((insertFill && tableInfo.isWithInsertFill()) || (!insertFill && tableInfo.isWithUpdateFill())) {
             strictFills.forEach(i -> {
                 final String fieldName = i.getFieldName();
-                Optional<TableFieldInfo> info = list.stream().filter(j -> j.getProperty().equals(fieldName) &&
-                    i.getFieldType().equals(j.getPropertyType()) &&
-                    ((insertFill && j.isWithInsertFill()) || (!insertFill && j.isWithUpdateFill())))
-                    .findFirst();
-                info.ifPresent(j -> strictFillStrategy(metaObject, fieldName, i.getFieldVal()));
+                tableInfo.getFieldList().stream()
+                    .filter(j -> j.getProperty().equals(fieldName) && i.getFieldType().equals(j.getPropertyType()) &&
+                        ((insertFill && j.isWithInsertFill()) || (!insertFill && j.isWithUpdateFill()))).findFirst()
+                    .ifPresent(j -> strictFillStrategy(metaObject, fieldName, i.getFieldVal()));
             });
         }
         return this;
     }
 
     /**
-     * 严格填充策略,默认有值不覆盖
+     * 填充策略,默认有值不覆盖
+     *
+     * @param metaObject metaObject meta object parameter
+     * @param fieldName  java bean property name
+     * @param fieldVal   java bean property value of Supplier
+     * @since 3.3.0
+     */
+    default MetaObjectHandler fillStrategy(MetaObject metaObject, String fieldName, Object fieldVal) {
+        if (getFieldValByName(fieldName, metaObject) == null) {
+            setFieldValByName(fieldName, fieldVal, metaObject);
+        }
+        return this;
+    }
+
+    /**
+     * 严格模式填充策略,默认有值不覆盖
      *
      * @param metaObject metaObject meta object parameter
      * @param fieldName  java bean property name
      * @param fieldVal   java bean property value of Supplier
      * @since 3.3.0
      */
-    default void strictFillStrategy(MetaObject metaObject, String fieldName, Supplier<Object> fieldVal) {
+    default MetaObjectHandler strictFillStrategy(MetaObject metaObject, String fieldName, Supplier<Object> fieldVal) {
         if (getFieldValByName(fieldName, metaObject) == null) {
             setFieldValByName(fieldName, fieldVal.get(), metaObject);
         }
+        return this;
     }
 }