|
@@ -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);
|
|
|
}
|