Bläddra i källkod

关上打开的非实体映射的大门.

nieqiuqiu 5 år sedan
förälder
incheckning
fa6c189a54

+ 11 - 15
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/MybatisDefaultParameterHandler.java

@@ -76,20 +76,14 @@ public class MybatisDefaultParameterHandler extends DefaultParameterHandler {
         if (SqlCommandType.INSERT == ms.getSqlCommandType() || SqlCommandType.UPDATE == ms.getSqlCommandType()) {
         if (SqlCommandType.INSERT == ms.getSqlCommandType() || SqlCommandType.UPDATE == ms.getSqlCommandType()) {
             Collection<Object> parameters = getParameters(parameterObject);
             Collection<Object> parameters = getParameters(parameterObject);
             if (null != parameters) {
             if (null != parameters) {
-                List<Object> objList = new ArrayList<>();
-                for (Object parameter : parameters) {
-                    TableInfo tableInfo = TableInfoHelper.getTableInfo(parameter.getClass());
-                    if (null != tableInfo) {
-                        handlerFill(ms, populateKeys(ms, tableInfo, parameter));
-                        objList.add(parameter);
-                    } else {
-                        /*
-                         * 非表映射类不处理
-                         */
-                        objList.add(parameter);
+                parameters.stream().filter(Objects::nonNull).forEach(obj -> {
+                    // 感觉这里可以稍微优化一下,理论上都是同一个.
+                    TableInfo tableInfo = TableInfoHelper.getTableInfo(obj.getClass());
+                    if (tableInfo != null) {
+                        handlerFill(ms, populateKeys(ms, tableInfo, obj));
                     }
                     }
-                }
-                return objList;
+                });
+                return parameterObject;
             } else {
             } else {
                 TableInfo tableInfo = null;
                 TableInfo tableInfo = null;
                 if (parameterObject instanceof Map) {
                 if (parameterObject instanceof Map) {
@@ -110,7 +104,9 @@ public class MybatisDefaultParameterHandler extends DefaultParameterHandler {
                 } else {
                 } else {
                     tableInfo = TableInfoHelper.getTableInfo(parameterObject.getClass());
                     tableInfo = TableInfoHelper.getTableInfo(parameterObject.getClass());
                 }
                 }
-                handlerFill(ms, populateKeys(ms, tableInfo, parameterObject));
+                if (tableInfo != null) {
+                    handlerFill(ms, populateKeys(ms, tableInfo, parameterObject));
+                }
                 return parameterObject;
                 return parameterObject;
             }
             }
         }
         }
@@ -156,7 +152,7 @@ public class MybatisDefaultParameterHandler extends DefaultParameterHandler {
     protected static MetaObject populateKeys(MappedStatement ms, TableInfo tableInfo, Object parameterObject) {
     protected static MetaObject populateKeys(MappedStatement ms, TableInfo tableInfo, Object parameterObject) {
         MetaObject metaObject = ms.getConfiguration().newMetaObject(parameterObject);
         MetaObject metaObject = ms.getConfiguration().newMetaObject(parameterObject);
         // 填充主键
         // 填充主键
-        if (tableInfo != null && SqlCommandType.INSERT == ms.getSqlCommandType()) {
+        if (SqlCommandType.INSERT == ms.getSqlCommandType()) {
             if (!StringUtils.isBlank(tableInfo.getKeyProperty())
             if (!StringUtils.isBlank(tableInfo.getKeyProperty())
                 && null != tableInfo.getIdType() && tableInfo.getIdType().getKey() >= 3) {
                 && null != tableInfo.getIdType() && tableInfo.getIdType().getKey() >= 3) {
                 IdGenerator idGenerator = GlobalConfigUtils.getGlobalConfig(tableInfo.getConfiguration()).getIdGenerator();
                 IdGenerator idGenerator = GlobalConfigUtils.getGlobalConfig(tableInfo.getConfiguration()).getIdGenerator();

+ 98 - 0
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/MybatisDefaultParameterHandlerTest.java

@@ -0,0 +1,98 @@
+package com.baomidou.mybatisplus.core;
+
+import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
+import com.baomidou.mybatisplus.core.incrementer.DefaultIdGenerator;
+import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
+import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.apache.ibatis.builder.MapperBuilderAssistant;
+import org.apache.ibatis.builder.StaticSqlSource;
+import org.apache.ibatis.mapping.MappedStatement;
+import org.apache.ibatis.mapping.SqlCommandType;
+import org.apache.ibatis.reflection.MetaObject;
+import org.apache.ibatis.session.Configuration;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+import java.util.List;
+
+
+class MybatisDefaultParameterHandlerTest {
+
+    @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
+    private static class Model {
+
+        private Long id;
+
+        private String name;
+
+        private String insertOperator;
+
+        private String updateOperator;
+
+        Model(String name) {
+            this.name = name;
+        }
+    }
+
+    @Test
+    void test() {
+        MappedStatement mappedStatement;
+        Configuration configuration = new MybatisConfiguration();
+        StaticSqlSource staticSqlSource = new StaticSqlSource(configuration, " ***********");
+        GlobalConfigUtils.getGlobalConfig(configuration).setIdGenerator(new DefaultIdGenerator()).setMetaObjectHandler(new MetaObjectHandler() {
+            @Override
+            public void insertFill(MetaObject metaObject) {
+                setFieldValByName("insertOperator", "咩咩", metaObject);
+            }
+
+            @Override
+            public void updateFill(MetaObject metaObject) {
+                setFieldValByName("updateOperator", "逗号", metaObject);
+            }
+        });
+        Model model = new Model("坦克");
+        TableInfoHelper.initTableInfo(new MapperBuilderAssistant(configuration,""), Model.class);
+        //查询
+        mappedStatement = new MappedStatement.Builder(configuration, "***", staticSqlSource, SqlCommandType.SELECT).build();
+        MybatisDefaultParameterHandler.processBatch(mappedStatement, model);
+        Assertions.assertNull(model.getId());
+        Assertions.assertNull(model.getInsertOperator());
+        Assertions.assertNull(model.getUpdateOperator());
+        // 普通插入
+        mappedStatement = new MappedStatement.Builder(configuration, "***", staticSqlSource, SqlCommandType.INSERT).build();
+        MybatisDefaultParameterHandler.processBatch(mappedStatement, model);
+        Assertions.assertNotNull(model.getId());
+        Assertions.assertNotNull(model.getInsertOperator());
+        Assertions.assertNull(model.getUpdateOperator());
+        //普通更新
+        mappedStatement = new MappedStatement.Builder(configuration, "***", staticSqlSource, SqlCommandType.UPDATE).build();
+        MybatisDefaultParameterHandler.processBatch(mappedStatement, model);
+        Assertions.assertNotNull(model.getId());
+        Assertions.assertNotNull(model.getInsertOperator());
+        Assertions.assertNotNull(model.getUpdateOperator());
+        //批量插入
+        List<Model> list = Arrays.asList(new Model("坦克一号"), new Model("坦克二号"));
+        mappedStatement = new MappedStatement.Builder(configuration, "***", staticSqlSource, SqlCommandType.INSERT).build();
+        MybatisDefaultParameterHandler.processBatch(mappedStatement, list);
+        list.forEach(m -> {
+            Assertions.assertNotNull(m.getId());
+            Assertions.assertNotNull(m.getInsertOperator());
+            Assertions.assertNull(m.getUpdateOperator());
+        });
+        //批量更新
+        mappedStatement = new MappedStatement.Builder(configuration, "***", staticSqlSource, SqlCommandType.UPDATE).build();
+        MybatisDefaultParameterHandler.processBatch(mappedStatement, list);
+        list.forEach(m -> {
+            Assertions.assertNotNull(m.getId());
+            Assertions.assertNotNull(m.getInsertOperator());
+            Assertions.assertNotNull(m.getUpdateOperator());
+        });
+    }
+
+}