Browse Source

简化填充器代码.

nieqiurong 1 year ago
parent
commit
40aac96745

+ 8 - 41
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/MybatisParameterHandler.java

@@ -16,7 +16,6 @@
 package com.baomidou.mybatisplus.core;
 
 import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
 import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
 import com.baomidou.mybatisplus.core.metadata.TableInfo;
 import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
@@ -27,13 +26,12 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import org.apache.ibatis.mapping.BoundSql;
 import org.apache.ibatis.mapping.MappedStatement;
 import org.apache.ibatis.mapping.SqlCommandType;
+import org.apache.ibatis.ognl.OgnlOps;
 import org.apache.ibatis.reflection.MetaObject;
 import org.apache.ibatis.scripting.defaults.DefaultParameterHandler;
 import org.apache.ibatis.session.Configuration;
 import org.apache.ibatis.type.SimpleTypeRegistry;
 
-import java.math.BigDecimal;
-import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -59,7 +57,6 @@ public class MybatisParameterHandler extends DefaultParameterHandler {
     @Deprecated
     public static final String[] COLLECTION_KEYS = new String[]{"collection", "coll", "list", "array"};
 
-    private final Object parameterObject;
     private final Configuration configuration;
     private final SqlCommandType sqlCommandType;
     private final MappedStatement mappedStatement;
@@ -69,25 +66,16 @@ public class MybatisParameterHandler extends DefaultParameterHandler {
         this.mappedStatement = mappedStatement;
         this.configuration = mappedStatement.getConfiguration();
         this.sqlCommandType = mappedStatement.getSqlCommandType();
-        this.parameterObject = processParameter(parameter);
+        processParameter(parameter);
     }
 
-    public Object processParameter(Object parameter) {
+    public void processParameter(Object parameter) {
         /* 只处理插入或更新操作 */
-        if (parameter != null
-            && (SqlCommandType.INSERT == this.sqlCommandType || SqlCommandType.UPDATE == this.sqlCommandType)) {
-            //检查 parameterObject
-            if (SimpleTypeRegistry.isSimpleType(parameter.getClass())) {
-                return parameter;
+        if (parameter != null && !SimpleTypeRegistry.isSimpleType(parameter.getClass())) {
+            if (SqlCommandType.INSERT == this.sqlCommandType || SqlCommandType.UPDATE == this.sqlCommandType) {
+                extractParameters(parameter).forEach(this::process);
             }
-            extractParameters(parameter).forEach(this::process);
         }
-        return parameter;
-    }
-
-    @Override
-    public Object getParameterObject() {
-        return this.parameterObject;
     }
 
     private void process(Object parameter) {
@@ -120,7 +108,6 @@ public class MybatisParameterHandler extends DefaultParameterHandler {
         }
     }
 
-
     protected void populateKeys(TableInfo tableInfo, MetaObject metaObject, Object entity) {
         final IdType idType = tableInfo.getIdType();
         final String keyProperty = tableInfo.getKeyProperty();
@@ -129,27 +116,8 @@ public class MybatisParameterHandler extends DefaultParameterHandler {
             Object idValue = metaObject.getValue(keyProperty);
             if (identifierGenerator.assignId(idValue)) {
                 if (idType.getKey() == IdType.ASSIGN_ID.getKey()) {
-                    Class<?> keyType = tableInfo.getKeyType();
-                    if (Number.class.isAssignableFrom(keyType)) {
-                        Number id = identifierGenerator.nextId(entity);
-                        if (keyType == id.getClass()) {
-                            metaObject.setValue(keyProperty, id);
-                        } else if (Integer.class == keyType) {
-                            metaObject.setValue(keyProperty, id.intValue());
-                        } else if (Long.class == keyType) {
-                            metaObject.setValue(keyProperty, id.longValue());
-                        } else if (BigDecimal.class.isAssignableFrom(keyType)) {
-                            metaObject.setValue(keyProperty, new BigDecimal(id.longValue()));
-                        } else if (BigInteger.class.isAssignableFrom(keyType)) {
-                            metaObject.setValue(keyProperty, new BigInteger(id.toString()));
-                        } else {
-                            throw new MybatisPlusException("Key type '" + keyType + "' not supported");
-                        }
-                    } else if (String.class.isAssignableFrom(keyType)) {
-                        metaObject.setValue(keyProperty, identifierGenerator.nextId(entity).toString());
-                    } else {
-                        metaObject.setValue(keyProperty, identifierGenerator.nextId(entity));
-                    }
+                    Number id = identifierGenerator.nextId(entity);
+                    metaObject.setValue(keyProperty, OgnlOps.convertValue(id, tableInfo.getKeyType()));
                 } else if (idType.getKey() == IdType.ASSIGN_UUID.getKey()) {
                     metaObject.setValue(keyProperty, identifierGenerator.nextUUID(entity));
                 }
@@ -157,7 +125,6 @@ public class MybatisParameterHandler extends DefaultParameterHandler {
         }
     }
 
-
     protected void insertFill(MetaObject metaObject, TableInfo tableInfo) {
         GlobalConfigUtils.getMetaObjectHandler(this.configuration).ifPresent(metaObjectHandler -> {
             if (metaObjectHandler.openInsertFill() && metaObjectHandler.openInsertFill(mappedStatement) && tableInfo.isWithInsertFill()) {