|
@@ -15,17 +15,16 @@
|
|
*/
|
|
*/
|
|
package com.baomidou.mybatisplus.core.handlers;
|
|
package com.baomidou.mybatisplus.core.handlers;
|
|
|
|
|
|
-import java.util.Objects;
|
|
|
|
-import java.util.Optional;
|
|
|
|
-
|
|
|
|
-import org.apache.ibatis.reflection.MetaObject;
|
|
|
|
-import org.apache.ibatis.reflection.SystemMetaObject;
|
|
|
|
-
|
|
|
|
import com.baomidou.mybatisplus.annotation.FieldFill;
|
|
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.toolkit.Constants;
|
|
import com.baomidou.mybatisplus.core.toolkit.Constants;
|
|
import com.baomidou.mybatisplus.core.toolkit.TableInfoHelper;
|
|
import com.baomidou.mybatisplus.core.toolkit.TableInfoHelper;
|
|
|
|
+import org.apache.ibatis.reflection.MetaObject;
|
|
|
|
+import org.apache.ibatis.reflection.SystemMetaObject;
|
|
|
|
+
|
|
|
|
+import java.util.Objects;
|
|
|
|
+import java.util.Optional;
|
|
|
|
|
|
/**
|
|
/**
|
|
* <p>
|
|
* <p>
|
|
@@ -58,19 +57,13 @@ public interface MetaObjectHandler {
|
|
|
|
|
|
/**
|
|
/**
|
|
* <p>
|
|
* <p>
|
|
- * Common method to set value for java bean.
|
|
|
|
- * </p>
|
|
|
|
- * <p>
|
|
|
|
- * 如果包含前缀 et 使用该方法,否则可以直接 metaObject.setValue(fieldName, fieldVal);
|
|
|
|
|
|
+ * 通用填充
|
|
* </p>
|
|
* </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
|
|
* @param metaObject meta object parameter
|
|
* @param metaObject meta object parameter
|
|
- * @see MetaObjectHandler#setInsertFieldValByName(String, Object, MetaObject) 替代之前版本insert填充
|
|
|
|
- * @see MetaObjectHandler#setUpdateFieldValByName(String, Object, MetaObject) 替代之前版本update填充
|
|
|
|
*/
|
|
*/
|
|
- @Deprecated
|
|
|
|
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)) {
|
|
if (metaObject.hasSetter(fieldName) && metaObject.hasGetter(fieldName)) {
|
|
@@ -90,13 +83,12 @@ public interface MetaObjectHandler {
|
|
|
|
|
|
/**
|
|
/**
|
|
* <p>
|
|
* <p>
|
|
- * 替代之前版本insert填充
|
|
|
|
|
|
+ * insert 时填充,只会填充 fill 被标识为 INSERT 与 INSERT_UPDATE 的字段
|
|
* </p>
|
|
* </p>
|
|
*
|
|
*
|
|
- * @param fieldName
|
|
|
|
- * @param fieldVal
|
|
|
|
- * @param metaObject
|
|
|
|
- * @return
|
|
|
|
|
|
+ * @param fieldName java bean property name
|
|
|
|
+ * @param fieldVal java bean property value
|
|
|
|
+ * @param metaObject meta object parameter
|
|
* @since 3.0.7
|
|
* @since 3.0.7
|
|
*/
|
|
*/
|
|
default MetaObjectHandler setInsertFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject) {
|
|
default MetaObjectHandler setInsertFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject) {
|
|
@@ -105,13 +97,12 @@ public interface MetaObjectHandler {
|
|
|
|
|
|
/**
|
|
/**
|
|
* <p>
|
|
* <p>
|
|
- * 替代之前版本update填充
|
|
|
|
|
|
+ * update 时填充,只会填充 fill 被标识为 UPDATE 与 INSERT_UPDATE 的字段
|
|
* </p>
|
|
* </p>
|
|
*
|
|
*
|
|
- * @param fieldName
|
|
|
|
- * @param fieldVal
|
|
|
|
- * @param metaObject
|
|
|
|
- * @return
|
|
|
|
|
|
+ * @param fieldName java bean property name
|
|
|
|
+ * @param fieldVal java bean property value
|
|
|
|
+ * @param metaObject meta object parameter
|
|
* @since 3.0.7
|
|
* @since 3.0.7
|
|
*/
|
|
*/
|
|
default MetaObjectHandler setUpdateFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject) {
|
|
default MetaObjectHandler setUpdateFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject) {
|
|
@@ -134,13 +125,14 @@ public interface MetaObjectHandler {
|
|
*/
|
|
*/
|
|
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 (Objects.nonNull(fieldVal)) {
|
|
- if (metaObject.hasSetter(fieldName) && metaObject.hasGetter(fieldName) && isFill(fieldName, metaObject, fieldFill)) {
|
|
|
|
|
|
+ if (metaObject.hasSetter(fieldName) && metaObject.hasGetter(fieldName)
|
|
|
|
+ && isFill(fieldName, fieldVal, metaObject, fieldFill)) {
|
|
metaObject.setValue(fieldName, fieldVal);
|
|
metaObject.setValue(fieldName, fieldVal);
|
|
} else if (metaObject.hasGetter(Constants.ENTITY)) {
|
|
} else if (metaObject.hasGetter(Constants.ENTITY)) {
|
|
Object et = metaObject.getValue(Constants.ENTITY);
|
|
Object et = metaObject.getValue(Constants.ENTITY);
|
|
if (et != null) {
|
|
if (et != null) {
|
|
MetaObject etMeta = SystemMetaObject.forObject(et);
|
|
MetaObject etMeta = SystemMetaObject.forObject(et);
|
|
- if (etMeta.hasSetter(fieldName) && isFill(fieldName, etMeta, fieldFill)) {
|
|
|
|
|
|
+ if (etMeta.hasSetter(fieldName) && isFill(fieldName, fieldVal, etMeta, fieldFill)) {
|
|
etMeta.setValue(fieldName, fieldVal);
|
|
etMeta.setValue(fieldName, fieldVal);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -171,18 +163,28 @@ public interface MetaObjectHandler {
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 是否填充
|
|
|
|
|
|
+ * <p>
|
|
|
|
+ * 填充判断
|
|
|
|
+ * </p>
|
|
|
|
+ * <li> 如果是主键,不填充 </li>
|
|
|
|
+ * <li> 根据字段名找不到字段,不填充 </li>
|
|
|
|
+ * <li> 字段类型与填充值类型不匹配,不填充 </li>
|
|
*
|
|
*
|
|
- * @param fieldName 字段名
|
|
|
|
- * @param metaObject
|
|
|
|
- * @param fieldFill 填充策略
|
|
|
|
- * @return
|
|
|
|
|
|
+ * @param fieldName java bean property name
|
|
|
|
+ * @param fieldVal java bean property value
|
|
|
|
+ * @param metaObject meta object parameter
|
|
|
|
+ * @param fieldFill 填充策略枚举
|
|
|
|
+ * @return 是否进行填充
|
|
* @since 3.0.7
|
|
* @since 3.0.7
|
|
*/
|
|
*/
|
|
- default boolean isFill(String fieldName, MetaObject metaObject, FieldFill fieldFill) {
|
|
|
|
- TableInfo tableInfo = metaObject.hasGetter(MP_OPTLOCK_ET_ORIGINAL) ? TableInfoHelper.getTableInfo(metaObject.getValue(MP_OPTLOCK_ET_ORIGINAL).getClass()) : TableInfoHelper.getTableInfo(metaObject.getOriginalObject().getClass());
|
|
|
|
|
|
+ default boolean isFill(String fieldName, Object fieldVal, MetaObject metaObject, FieldFill fieldFill) {
|
|
|
|
+ TableInfo tableInfo = metaObject.hasGetter(MP_OPTLOCK_ET_ORIGINAL) ?
|
|
|
|
+ TableInfoHelper.getTableInfo(metaObject.getValue(MP_OPTLOCK_ET_ORIGINAL).getClass())
|
|
|
|
+ : TableInfoHelper.getTableInfo(metaObject.getOriginalObject().getClass());
|
|
if (Objects.nonNull(tableInfo)) {
|
|
if (Objects.nonNull(tableInfo)) {
|
|
- Optional<TableFieldInfo> first = tableInfo.getFieldList().stream().filter(e -> e.getProperty().equals(fieldName)).findFirst();
|
|
|
|
|
|
+ Optional<TableFieldInfo> first = tableInfo.getFieldList().stream()
|
|
|
|
+ .filter(e -> e.getProperty().equals(fieldName) && e.getPropertyType().equals(fieldVal.getClass()))
|
|
|
|
+ .findFirst();
|
|
if (first.isPresent()) {
|
|
if (first.isPresent()) {
|
|
FieldFill fill = first.get().getFieldFill();
|
|
FieldFill fill = first.get().getFieldFill();
|
|
return fill.equals(fieldFill) || FieldFill.INSERT_UPDATE.equals(fill);
|
|
return fill.equals(fieldFill) || FieldFill.INSERT_UPDATE.equals(fill);
|