miemie vor 7 Jahren
Ursprung
Commit
539c06780f

+ 33 - 15
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/handlers/MetaObjectHandler.java

@@ -15,6 +15,8 @@
  */
 package com.baomidou.mybatisplus.core.handlers;
 
+import java.util.function.Supplier;
+
 import org.apache.ibatis.reflection.MetaObject;
 import org.apache.ibatis.reflection.SystemMetaObject;
 
@@ -31,9 +33,7 @@ import com.baomidou.mybatisplus.core.toolkit.Constants;
 public interface MetaObjectHandler {
 
     /**
-     * <p>
-     * 插入元对象字段填充
-     * </p>
+     * 插入元对象字段填充(用于插入时对公共字段的填充)
      *
      * @param metaObject 元对象
      */
@@ -41,10 +41,6 @@ public interface MetaObjectHandler {
 
     /**
      * 更新元对象字段填充(用于更新时对公共字段的填充)
-     * Created with IntelliJ IDEA.
-     * Author:  Wu Yujie
-     * Email:  coffee377@dingtalk.com
-     * Time:  2017/04/16 15:03
      *
      * @param metaObject 元对象
      */
@@ -57,20 +53,42 @@ public interface MetaObjectHandler {
      * <p>
      * 如果包含前缀 et 使用该方法,否则可以直接 metaObject.setValue(fieldName, fieldVal);
      * </p>
+     * <p>
+     * 以后会删除这个方法,请转用下面的方法
+     * </p>
      *
      * @param fieldName  java bean property name
      * @param fieldVal   java bean property value
      * @param metaObject meta object parameter
      */
+    @Deprecated
     default MetaObjectHandler setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject) {
-        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);
+        return setFieldValByName(() -> fieldVal, metaObject, fieldName);
+    }
+
+    /**
+     * <p>
+     * Common method to set value for java bean.
+     * </p>
+     * <p>
+     * 如果包含前缀 et 使用该方法,否则可以直接 metaObject.setValue(fieldName, fieldVal);
+     * </p>
+     *
+     * @param fieldVal   java bean property value
+     * @param metaObject meta object parameter
+     * @param fieldNames java bean property names
+     */
+    default MetaObjectHandler setFieldValByName(Supplier<Object> fieldVal, MetaObject metaObject, String... fieldNames) {
+        for (String fieldName : fieldNames) {
+            if (metaObject.hasSetter(fieldName) && metaObject.hasGetter(fieldName)) {
+                metaObject.setValue(fieldName, fieldVal.get());
+            } 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.get());
+                    }
                 }
             }
         }