|
@@ -19,9 +19,7 @@ import com.baomidou.mybatisplus.annotation.FieldFill;
|
|
import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
|
|
import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
|
|
import com.baomidou.mybatisplus.core.metadata.TableInfo;
|
|
import com.baomidou.mybatisplus.core.metadata.TableInfo;
|
|
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
|
|
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.MetaObject;
|
|
-import org.apache.ibatis.reflection.SystemMetaObject;
|
|
|
|
|
|
|
|
import java.util.Collections;
|
|
import java.util.Collections;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
@@ -30,7 +28,9 @@ import java.util.Optional;
|
|
import java.util.function.Supplier;
|
|
import java.util.function.Supplier;
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 元对象字段填充控制器抽象类,实现公共字段自动写入
|
|
|
|
|
|
+ * 元对象字段填充控制器抽象类,实现公共字段自动写入<p>
|
|
|
|
+ * <p>
|
|
|
|
+ * 所有入参的 MetaObject 必定是 entity 或其子类的 MetaObject
|
|
*
|
|
*
|
|
* @author hubin
|
|
* @author hubin
|
|
* @since 2016-08-28
|
|
* @since 2016-08-28
|
|
@@ -87,21 +87,22 @@ public interface MetaObjectHandler {
|
|
*/
|
|
*/
|
|
default MetaObjectHandler setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject) {
|
|
default MetaObjectHandler setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject) {
|
|
if (Objects.nonNull(fieldVal)) {
|
|
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;
|
|
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 的字段
|
|
* insert 时填充,只会填充 fill 被标识为 INSERT 与 INSERT_UPDATE 的字段
|
|
*
|
|
*
|
|
@@ -132,7 +133,6 @@ public interface MetaObjectHandler {
|
|
|
|
|
|
/**
|
|
/**
|
|
* Common method to set value for java bean.
|
|
* Common method to set value for java bean.
|
|
- * <p>如果包含前缀 et 使用该方法,否则可以直接 metaObject.setValue(fieldName, fieldVal);</p>
|
|
|
|
*
|
|
*
|
|
* @param fieldName java bean property name
|
|
* @param fieldName java bean property name
|
|
* @param fieldVal java bean property value
|
|
* @param fieldVal java bean property value
|
|
@@ -143,19 +143,8 @@ public interface MetaObjectHandler {
|
|
*/
|
|
*/
|
|
@Deprecated
|
|
@Deprecated
|
|
default MetaObjectHandler setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject, FieldFill fieldFill) {
|
|
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;
|
|
return this;
|
|
}
|
|
}
|
|
@@ -178,37 +167,17 @@ public interface MetaObjectHandler {
|
|
*/
|
|
*/
|
|
@Deprecated
|
|
@Deprecated
|
|
default boolean isFill(String fieldName, Object fieldVal, MetaObject metaObject, FieldFill fieldFill) {
|
|
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;
|
|
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>
|
|
* find the tableInfo cache by metaObject </p>
|
|
* 获取 TableInfo 缓存
|
|
* 获取 TableInfo 缓存
|
|
@@ -218,9 +187,7 @@ public interface MetaObjectHandler {
|
|
* @since 3.3.0
|
|
* @since 3.3.0
|
|
*/
|
|
*/
|
|
default TableInfo findTableInfo(MetaObject metaObject) {
|
|
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
|
|
* @since 3.3.0
|
|
*/
|
|
*/
|
|
default MetaObjectHandler strictFill(boolean insertFill, TableInfo tableInfo, MetaObject metaObject, List<StrictFill> strictFills) {
|
|
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 -> {
|
|
strictFills.forEach(i -> {
|
|
final String fieldName = i.getFieldName();
|
|
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;
|
|
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 metaObject metaObject meta object parameter
|
|
* @param fieldName java bean property name
|
|
* @param fieldName java bean property name
|
|
* @param fieldVal java bean property value of Supplier
|
|
* @param fieldVal java bean property value of Supplier
|
|
* @since 3.3.0
|
|
* @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) {
|
|
if (getFieldValByName(fieldName, metaObject) == null) {
|
|
setFieldValByName(fieldName, fieldVal.get(), metaObject);
|
|
setFieldValByName(fieldName, fieldVal.get(), metaObject);
|
|
}
|
|
}
|
|
|
|
+ return this;
|
|
}
|
|
}
|
|
}
|
|
}
|