Browse Source

优化 insert

miemie 7 years ago
parent
commit
b68f364f8e

+ 11 - 45
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/Insert.java

@@ -15,23 +15,18 @@
  */
 package com.baomidou.mybatisplus.core.injector.methods;
 
-import java.util.List;
-
-import org.apache.ibatis.executor.keygen.Jdbc3KeyGenerator;
-import org.apache.ibatis.executor.keygen.KeyGenerator;
-import org.apache.ibatis.executor.keygen.NoKeyGenerator;
-import org.apache.ibatis.mapping.MappedStatement;
-import org.apache.ibatis.mapping.SqlSource;
-
-import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.core.enums.SqlMethod;
 import com.baomidou.mybatisplus.core.injector.AbstractMethod;
-import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
 import com.baomidou.mybatisplus.core.metadata.TableInfo;
-import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.TableInfoHelper;
+import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils;
+import org.apache.ibatis.executor.keygen.Jdbc3KeyGenerator;
+import org.apache.ibatis.executor.keygen.KeyGenerator;
+import org.apache.ibatis.executor.keygen.NoKeyGenerator;
+import org.apache.ibatis.mapping.MappedStatement;
+import org.apache.ibatis.mapping.SqlSource;
 
 /**
  * <p>
@@ -46,15 +41,13 @@ public class Insert extends AbstractMethod {
     @Override
     public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
         KeyGenerator keyGenerator = new NoKeyGenerator();
-        StringBuilder fieldBuilder = new StringBuilder();
-        StringBuilder placeholderBuilder = new StringBuilder();
         SqlMethod sqlMethod = SqlMethod.INSERT_ONE;
-
-        fieldBuilder.append("\n<trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">");
-        placeholderBuilder.append("\n<trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">");
+        String columnScript = SqlScriptUtils.convertTrim(tableInfo.getAllInsertSqlColumn(),
+            "(", ")", null, ",");
+        String valuesScript = SqlScriptUtils.convertTrim(tableInfo.getAllInsertSqlProperty(),
+            "(", ")", null, ",");
         String keyProperty = null;
         String keyColumn = null;
-
         // 表包含主键处理逻辑,如果不包含主键当普通字段处理
         if (StringUtils.isNotEmpty(tableInfo.getKeyProperty())) {
             if (tableInfo.getIdType() == IdType.AUTO) {
@@ -67,37 +60,10 @@ public class Insert extends AbstractMethod {
                     keyGenerator = TableInfoHelper.genKeyGenerator(tableInfo, builderAssistant, sqlMethod.getMethod(), languageDriver);
                     keyProperty = tableInfo.getKeyProperty();
                     keyColumn = tableInfo.getKeyColumn();
-                    fieldBuilder.append(tableInfo.getKeyColumn()).append(StringPool.COMMA);
-                    placeholderBuilder.append("#{").append(tableInfo.getKeyProperty()).append("},");
-                } else {
-                    /** 用户输入自定义ID */
-                    fieldBuilder.append(tableInfo.getKeyColumn()).append(StringPool.COMMA);
-                    // 正常自定义主键策略
-                    placeholderBuilder.append("#{").append(tableInfo.getKeyProperty()).append("},");
                 }
             }
         }
-
-        // 是否 IF 标签判断
-        List<TableFieldInfo> fieldList = tableInfo.getFieldList();
-        for (TableFieldInfo fieldInfo : fieldList) {
-            // 在FieldIgnore,INSERT_UPDATE,INSERT 时设置为false
-            if (FieldFill.INSERT == fieldInfo.getFieldFill()
-                || FieldFill.INSERT_UPDATE == fieldInfo.getFieldFill()) {
-                fieldBuilder.append(fieldInfo.getColumn()).append(StringPool.COMMA);
-                placeholderBuilder.append("#{").append(fieldInfo.getEl()).append("},");
-            } else {
-                fieldBuilder.append(convertIfTagIgnored(fieldInfo, false));
-                fieldBuilder.append(fieldInfo.getColumn()).append(StringPool.COMMA);
-                fieldBuilder.append(convertIfTagIgnored(fieldInfo, true));
-                placeholderBuilder.append(convertIfTagIgnored(fieldInfo, false));
-                placeholderBuilder.append("#{").append(fieldInfo.getEl()).append("},");
-                placeholderBuilder.append(convertIfTagIgnored(fieldInfo, true));
-            }
-        }
-        fieldBuilder.append("\n</trim>");
-        placeholderBuilder.append("\n</trim>");
-        String sql = String.format(sqlMethod.getSql(), tableInfo.getTableName(), fieldBuilder.toString(), placeholderBuilder.toString());
+        String sql = String.format(sqlMethod.getSql(), tableInfo.getTableName(), columnScript, valuesScript);
         SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
         return this.addInsertMappedStatement(mapperClass, modelClass, sqlMethod.getMethod(), sqlSource, keyGenerator, keyProperty, keyColumn);
     }

+ 3 - 3
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/sql/SqlScriptUtils.java

@@ -63,8 +63,7 @@ public final class SqlScriptUtils {
      */
     public static String convertTrim(String sqlScript, String prefix, String suffix, String prefixOverride,
                                      String suffixOverrides) {
-        StringBuilder sb = new StringBuilder();
-        sb.append("<trim");
+        StringBuilder sb = new StringBuilder("<trim");
         if (StringUtils.isNotEmpty(prefix)) {
             sb.append(StringPool.SPACE).append("prefix=\"").append(prefix).append(StringPool.QUOTE);
         }
@@ -77,6 +76,7 @@ public final class SqlScriptUtils {
         if (StringUtils.isNotEmpty(suffixOverrides)) {
             sb.append(StringPool.SPACE).append("suffixOverrides=\"").append(suffixOverrides).append(StringPool.QUOTE);
         }
-        return sb.append(StringPool.RIGHT_CHEV).append(sqlScript).append("</trim>").toString();
+        return sb.append(StringPool.RIGHT_CHEV).append(StringPool.NEWLINE).append(sqlScript)
+            .append(StringPool.NEWLINE).append("</trim>").toString();
     }
 }