From 2cfa1ddd2deea6a4d4f7a0687561962c63d0b73f Mon Sep 17 00:00:00 2001 From: hewei Date: Fri, 13 Jan 2017 14:01:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E6=89=B9=E9=87=8F=E6=8F=92?= =?UTF-8?q?=E5=85=A5=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../generator/plugins/BatchInsertPlugin.java | 36 ++++++++----------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/itfsw/mybatis/generator/plugins/BatchInsertPlugin.java b/src/main/java/com/itfsw/mybatis/generator/plugins/BatchInsertPlugin.java index 19616bd..8fdee91 100644 --- a/src/main/java/com/itfsw/mybatis/generator/plugins/BatchInsertPlugin.java +++ b/src/main/java/com/itfsw/mybatis/generator/plugins/BatchInsertPlugin.java @@ -17,11 +17,9 @@ package com.itfsw.mybatis.generator.plugins; import com.itfsw.mybatis.generator.plugins.utils.CommentTools; -import com.itfsw.mybatis.generator.plugins.utils.XmlElementGeneratorTools; import org.mybatis.generator.api.IntrospectedColumn; import org.mybatis.generator.api.IntrospectedTable; import org.mybatis.generator.api.PluginAdapter; -import org.mybatis.generator.api.dom.OutputUtilities; import org.mybatis.generator.api.dom.java.*; import org.mybatis.generator.api.dom.xml.Attribute; import org.mybatis.generator.api.dom.xml.Document; @@ -60,6 +58,13 @@ public class BatchInsertPlugin extends PluginAdapter { logger.warn("itfsw:插件" + this.getClass().getTypeName() + "要求运行targetRuntime必须为MyBatis3!"); return false; } + // 插件使用前提是数据库为MySQL或者SQLserver,因为返回主键使用了JDBC的getGenereatedKeys方法获取主键 + if ("com.mysql.jdbc.Driver".equalsIgnoreCase(this.getContext().getJdbcConnectionConfiguration().getDriverClass()) == false + && "com.microsoft.jdbc.sqlserver.SQLServer".equalsIgnoreCase(this.getContext().getJdbcConnectionConfiguration().getDriverClass()) == false + && "com.microsoft.sqlserver.jdbc.SQLServerDriver".equalsIgnoreCase(this.getContext().getJdbcConnectionConfiguration().getDriverClass()) == false){ + logger.warn("itfsw:插件" + this.getClass().getTypeName() + "插件使用前提是数据库为MySQL或者SQLserver,因为返回主键使用了JDBC的getGenereatedKeys方法获取主键!"); + return false; + } return true; } @@ -82,7 +87,7 @@ public class BatchInsertPlugin extends PluginAdapter { method.setReturnType(FullyQualifiedJavaType.getIntInstance()); // 添加参数 FullyQualifiedJavaType type = FullyQualifiedJavaType.getNewListInstance(); - type.addTypeArgument(interfaze.getType()); + type.addTypeArgument(introspectedTable.getRules().calculateAllFieldsClass()); method.addParameter(new Parameter(type, "list", "@Param(\"list\")")); // 添加方法说明 CommentTools.addGeneralMethodComment(method, introspectedTable); @@ -129,13 +134,10 @@ public class BatchInsertPlugin extends PluginAdapter { // if the column is null, then it's a configuration error. The // warning has already been reported if (introspectedColumn != null) { - if (gk.isJdbcStandard()) { - element.addAttribute(new Attribute("useGeneratedKeys", "true")); //$NON-NLS-1$ //$NON-NLS-2$ - element.addAttribute(new Attribute("keyProperty", introspectedColumn.getJavaProperty())); //$NON-NLS-1$ - element.addAttribute(new Attribute("keyColumn", introspectedColumn.getActualColumnName())); //$NON-NLS-1$ - } else { - element.addElement(XmlElementGeneratorTools.getSelectKey(introspectedColumn, gk)); - } + // 使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。所以只支持MYSQL和SQLServer + element.addAttribute(new Attribute("useGeneratedKeys", "true")); //$NON-NLS-1$ //$NON-NLS-2$ + element.addAttribute(new Attribute("keyProperty", introspectedColumn.getJavaProperty())); //$NON-NLS-1$ + element.addAttribute(new Attribute("keyColumn", introspectedColumn.getActualColumnName())); //$NON-NLS-1$ } } @@ -154,21 +156,13 @@ public class BatchInsertPlugin extends PluginAdapter { IntrospectedColumn introspectedColumn = columns.get(i); insertClause.append(MyBatis3FormattingUtilities.getEscapedColumnName(introspectedColumn)); - valuesClause.append(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn)); + + // 生成foreach下插入values + valuesClause.append(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn, "item.")); if (i + 1 < columns.size()) { insertClause.append(", "); //$NON-NLS-1$ valuesClause.append(", "); //$NON-NLS-1$ } - - if (valuesClause.length() > 80) { - element.addElement(new TextElement(insertClause.toString())); - insertClause.setLength(0); - OutputUtilities.xmlIndent(insertClause, 1); - - valuesClauses.add(valuesClause.toString()); - valuesClause.setLength(0); - OutputUtilities.xmlIndent(valuesClause, 1); - } } insertClause.append(')');