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 f4dd35f..eafbfa6 100644 --- a/src/main/java/com/itfsw/mybatis/generator/plugins/BatchInsertPlugin.java +++ b/src/main/java/com/itfsw/mybatis/generator/plugins/BatchInsertPlugin.java @@ -23,10 +23,7 @@ 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.dom.java.*; -import org.mybatis.generator.api.dom.xml.Attribute; -import org.mybatis.generator.api.dom.xml.Document; -import org.mybatis.generator.api.dom.xml.TextElement; -import org.mybatis.generator.api.dom.xml.XmlElement; +import org.mybatis.generator.api.dom.xml.*; import org.mybatis.generator.codegen.mybatis3.ListUtilities; import org.mybatis.generator.codegen.mybatis3.MyBatis3FormattingUtilities; @@ -53,7 +50,7 @@ public class BatchInsertPlugin extends BasePlugin { // 插件使用前提是数据库为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){ + && "com.microsoft.sqlserver.jdbc.SQLServerDriver".equalsIgnoreCase(this.getContext().getJdbcConnectionConfiguration().getDriverClass()) == false) { logger.error("itfsw:插件" + this.getClass().getTypeName() + "插件使用前提是数据库为MySQL或者SQLserver,因为返回主键使用了JDBC的getGenereatedKeys方法获取主键!"); return false; } @@ -69,11 +66,9 @@ public class BatchInsertPlugin extends BasePlugin { } - /** * Java Client Methods 生成 * 具体执行顺序 http://www.mybatis.org/generator/reference/pluggingIn.html - * * @param interfaze * @param topLevelClass * @param introspectedTable @@ -97,7 +92,7 @@ public class BatchInsertPlugin extends BasePlugin { logger.debug("itfsw(批量插入插件):" + interfaze.getType().getShortName() + "增加batchInsert方法。"); // 2. batchInsertSelective - FullyQualifiedJavaType selectiveType = new FullyQualifiedJavaType(introspectedTable.getRules().calculateAllFieldsClass().getShortName()+"."+ModelColumnPlugin.ENUM_NAME); + FullyQualifiedJavaType selectiveType = new FullyQualifiedJavaType(introspectedTable.getRules().calculateAllFieldsClass().getShortName() + "." + ModelColumnPlugin.ENUM_NAME); Method mBatchInsertSelective = JavaElementGeneratorTools.generateMethod( METHOD_BATCH_INSERT_SELECTIVE, JavaVisibility.DEFAULT, @@ -116,7 +111,6 @@ public class BatchInsertPlugin extends BasePlugin { /** * SQL Map Methods 生成 * 具体执行顺序 http://www.mybatis.org/generator/reference/pluggingIn.html - * * @param document * @param introspectedTable * @return @@ -135,7 +129,9 @@ public class BatchInsertPlugin extends BasePlugin { XmlElementGeneratorTools.useGeneratedKeys(batchInsertEle, introspectedTable); batchInsertEle.addElement(new TextElement("insert into " + introspectedTable.getFullyQualifiedTableNameAtRuntime())); - batchInsertEle.addElement(XmlElementGeneratorTools.generateKeys(ListUtilities.removeIdentityAndGeneratedAlwaysColumns(introspectedTable.getAllColumns()))); + for (Element element : XmlElementGeneratorTools.generateKeys(ListUtilities.removeIdentityAndGeneratedAlwaysColumns(introspectedTable.getAllColumns()))) { + batchInsertEle.addElement(element); + } // 添加foreach节点 XmlElement foreachElement = new XmlElement("foreach"); @@ -143,8 +139,9 @@ public class BatchInsertPlugin extends BasePlugin { foreachElement.addAttribute(new Attribute("item", "item")); foreachElement.addAttribute(new Attribute("separator", ",")); - foreachElement.addElement(XmlElementGeneratorTools.generateValues(ListUtilities.removeIdentityAndGeneratedAlwaysColumns(introspectedTable.getAllColumns()), "item.")); - + for (Element element : XmlElementGeneratorTools.generateValues(ListUtilities.removeIdentityAndGeneratedAlwaysColumns(introspectedTable.getAllColumns()), "item.")) { + foreachElement.addElement(element); + } // values 构建 batchInsertEle.addElement(new TextElement("values")); @@ -165,7 +162,7 @@ public class BatchInsertPlugin extends BasePlugin { // 使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。所以只支持MYSQL和SQLServer XmlElementGeneratorTools.useGeneratedKeys(element, introspectedTable); - element.addElement(new TextElement("insert into "+introspectedTable.getFullyQualifiedTableNameAtRuntime()+" (")); + element.addElement(new TextElement("insert into " + introspectedTable.getFullyQualifiedTableNameAtRuntime() + " (")); XmlElement foreachInsertColumns = new XmlElement("foreach"); foreachInsertColumns.addAttribute(new Attribute("collection", "selective")); @@ -200,7 +197,7 @@ public class BatchInsertPlugin extends BasePlugin { for (int i = 0; i < columns1.size(); i++) { IntrospectedColumn introspectedColumn = columns.get(i); XmlElement check = new XmlElement("if"); - check.addAttribute(new Attribute("test", "'"+introspectedColumn.getActualColumnName()+"' == column.value")); + check.addAttribute(new Attribute("test", "'" + introspectedColumn.getActualColumnName() + "' == column.value")); check.addElement(new TextElement(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn, "item."))); foreachInsertColumnsCheck.addElement(check); diff --git a/src/main/java/com/itfsw/mybatis/generator/plugins/UpsertPlugin.java b/src/main/java/com/itfsw/mybatis/generator/plugins/UpsertPlugin.java index 0804ba1..ef496f0 100644 --- a/src/main/java/com/itfsw/mybatis/generator/plugins/UpsertPlugin.java +++ b/src/main/java/com/itfsw/mybatis/generator/plugins/UpsertPlugin.java @@ -22,10 +22,7 @@ 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.dom.java.*; -import org.mybatis.generator.api.dom.xml.Attribute; -import org.mybatis.generator.api.dom.xml.Document; -import org.mybatis.generator.api.dom.xml.TextElement; -import org.mybatis.generator.api.dom.xml.XmlElement; +import org.mybatis.generator.api.dom.xml.*; import org.mybatis.generator.codegen.mybatis3.ListUtilities; import org.mybatis.generator.internal.util.StringUtility; @@ -61,7 +58,7 @@ public class UpsertPlugin extends BasePlugin { public boolean validate(List warnings) { // 插件使用前提是数据库为MySQL - if ("com.mysql.jdbc.Driver".equalsIgnoreCase(this.getContext().getJdbcConnectionConfiguration().getDriverClass()) == false){ + if ("com.mysql.jdbc.Driver".equalsIgnoreCase(this.getContext().getJdbcConnectionConfiguration().getDriverClass()) == false) { logger.error("itfsw:插件" + this.getClass().getTypeName() + "插件使用前提是数据库为MySQL!"); return false; } @@ -70,7 +67,7 @@ public class UpsertPlugin extends BasePlugin { Properties properties = this.getProperties(); String allowMultiQueries = properties.getProperty(PRE_ALLOW_MULTI_QUERIES); this.allowMultiQueries = allowMultiQueries == null ? false : StringUtility.isTrue(allowMultiQueries); - if (this.allowMultiQueries){ + if (this.allowMultiQueries) { // 提示用户注意信息 logger.warn("itfsw:插件" + this.getClass().getTypeName() + "插件您开启了allowMultiQueries支持,注意在jdbc url 配置中增加“allowMultiQueries=true”支持(不怎么建议使用该功能,开启多sql提交会增加sql注入的风险,请确保你所有sql都使用MyBatis书写,请不要使用statement进行sql提交)!"); } @@ -81,7 +78,6 @@ public class UpsertPlugin extends BasePlugin { /** * Java Client Methods 生成 * 具体执行顺序 http://www.mybatis.org/generator/reference/pluggingIn.html - * * @param interfaze * @param topLevelClass * @param introspectedTable @@ -113,7 +109,7 @@ public class UpsertPlugin extends BasePlugin { interfaze.addMethod(mUpsertSelective); logger.debug("itfsw(存在即更新插件):" + interfaze.getType().getShortName() + "增加upsertSelective方法。"); - if (this.allowMultiQueries){ + if (this.allowMultiQueries) { // ====================================== 3. upsertByExample ====================================== Method mUpsertByExample = JavaElementGeneratorTools.generateMethod( METHOD_UPSERT_BY_EXAMPLE, @@ -142,7 +138,7 @@ public class UpsertPlugin extends BasePlugin { } // !!! 注意这里的行为不以有没有生成Model 的 WithBLOBs类为基准 - if (introspectedTable.hasBLOBColumns()){ + if (introspectedTable.hasBLOBColumns()) { // ====================================== 1. upsertWithBLOBs ====================================== Method mUpsertWithBLOBs = JavaElementGeneratorTools.generateMethod( METHOD_UPSERT_WITH_BLOBS, @@ -167,7 +163,7 @@ public class UpsertPlugin extends BasePlugin { interfaze.addMethod(mUpsertSelectiveWithBLOBs); logger.debug("itfsw(存在即更新插件):" + interfaze.getType().getShortName() + "增加upsertSelective方法。"); - if (this.allowMultiQueries){ + if (this.allowMultiQueries) { // ====================================== 3. upsertByExampleWithBLOBs ====================================== Method mUpsertByExampleWithBLOBs = JavaElementGeneratorTools.generateMethod( METHOD_UPSERT_BY_EXAMPLE_WITH_BLOBS, @@ -202,7 +198,6 @@ public class UpsertPlugin extends BasePlugin { /** * SQL Map Methods 生成 * 具体执行顺序 http://www.mybatis.org/generator/reference/pluggingIn.html - * * @param document * @param introspectedTable * @return @@ -213,7 +208,7 @@ public class UpsertPlugin extends BasePlugin { this.generateXmlElementWithoutBLOBs(document, introspectedTable); // !!! 注意这里的行为不以有没有生成Model 的 WithBLOBs类为基准 - if (introspectedTable.hasBLOBColumns()){ + if (introspectedTable.hasBLOBColumns()) { this.generateXmlElementWithBLOBs(document, introspectedTable); } @@ -222,11 +217,10 @@ public class UpsertPlugin extends BasePlugin { /** * 当Model有生成WithBLOBs类时的情况 - * * @param document * @param introspectedTable */ - private void generateXmlElementWithBLOBs(Document document, IntrospectedTable introspectedTable){ + private void generateXmlElementWithBLOBs(Document document, IntrospectedTable introspectedTable) { // ====================================== 1. upsert ====================================== XmlElement eleUpsertWithBLOBs = new XmlElement("insert"); eleUpsertWithBLOBs.addAttribute(new Attribute("id", METHOD_UPSERT_WITH_BLOBS)); @@ -241,11 +235,17 @@ public class UpsertPlugin extends BasePlugin { // insert eleUpsertWithBLOBs.addElement(new TextElement("insert into " + introspectedTable.getFullyQualifiedTableNameAtRuntime())); - eleUpsertWithBLOBs.addElement(XmlElementGeneratorTools.generateKeys(introspectedTable.getAllColumns())); + for (Element element : XmlElementGeneratorTools.generateKeys(introspectedTable.getAllColumns())) { + eleUpsertWithBLOBs.addElement(element); + } eleUpsertWithBLOBs.addElement(new TextElement("values")); - eleUpsertWithBLOBs.addElement(XmlElementGeneratorTools.generateValues(introspectedTable.getAllColumns())); + for (Element element : XmlElementGeneratorTools.generateValues(introspectedTable.getAllColumns())) { + eleUpsertWithBLOBs.addElement(element); + } eleUpsertWithBLOBs.addElement(new TextElement("on duplicate key update ")); - eleUpsertWithBLOBs.addElement(XmlElementGeneratorTools.generateSets(introspectedTable.getAllColumns())); + for (Element element : XmlElementGeneratorTools.generateSets(introspectedTable.getAllColumns())) { + eleUpsertWithBLOBs.addElement(element); + } document.getRootElement().addElement(eleUpsertWithBLOBs); logger.debug("itfsw(存在即更新插件):" + introspectedTable.getMyBatis3XmlMapperFileName() + "增加upsert实现方法。"); @@ -273,7 +273,7 @@ public class UpsertPlugin extends BasePlugin { document.getRootElement().addElement(eleUpsertSelectiveWithBLOBs); logger.debug("itfsw(存在即更新插件):" + introspectedTable.getMyBatis3XmlMapperFileName() + "增加upsertSelective实现方法。"); - if (this.allowMultiQueries){ + if (this.allowMultiQueries) { // ====================================== 2. upsertByExample ====================================== XmlElement eleUpsertByExampleWithBLOBs = new XmlElement("insert"); eleUpsertByExampleWithBLOBs.addAttribute(new Attribute("id", METHOD_UPSERT_BY_EXAMPLE_WITH_BLOBS)); @@ -287,7 +287,9 @@ public class UpsertPlugin extends BasePlugin { // insert eleUpsertByExampleWithBLOBs.addElement(new TextElement("insert into " + introspectedTable.getFullyQualifiedTableNameAtRuntime())); - eleUpsertByExampleWithBLOBs.addElement(XmlElementGeneratorTools.generateKeys(introspectedTable.getAllColumns())); + for (Element element : XmlElementGeneratorTools.generateKeys(introspectedTable.getAllColumns())) { + eleUpsertByExampleWithBLOBs.addElement(element); + } this.generateExistsClause(introspectedTable, eleUpsertByExampleWithBLOBs, false, true); // multiQueries @@ -296,7 +298,10 @@ public class UpsertPlugin extends BasePlugin { // update eleUpsertByExampleWithBLOBs.addElement(new TextElement("update " + introspectedTable.getAliasedFullyQualifiedTableNameAtRuntime())); eleUpsertByExampleWithBLOBs.addElement(new TextElement("set")); - eleUpsertByExampleWithBLOBs.addElement(XmlElementGeneratorTools.generateSets(ListUtilities.removeIdentityAndGeneratedAlwaysColumns(introspectedTable.getAllColumns()), "record.")); + for (Element element : XmlElementGeneratorTools.generateSets(ListUtilities.removeIdentityAndGeneratedAlwaysColumns(introspectedTable.getAllColumns()), "record.")) { + eleUpsertByExampleWithBLOBs.addElement(element); + } + // update where eleUpsertByExampleWithBLOBs.addElement(XmlElementGeneratorTools.getUpdateByExampleIncludeElement(introspectedTable)); @@ -337,11 +342,10 @@ public class UpsertPlugin extends BasePlugin { /** * 当Model没有生成WithBLOBs类时的情况 - * * @param document * @param introspectedTable */ - private void generateXmlElementWithoutBLOBs(Document document, IntrospectedTable introspectedTable){ + private void generateXmlElementWithoutBLOBs(Document document, IntrospectedTable introspectedTable) { // WithoutBLOBs也会存在只有一个时,不生成WithBLOBs对象的情况 boolean flag = !introspectedTable.getRules().generateRecordWithBLOBsClass(); List columns = flag ? introspectedTable.getAllColumns() : introspectedTable.getNonBLOBColumns(); @@ -360,11 +364,17 @@ public class UpsertPlugin extends BasePlugin { // insert eleUpsert.addElement(new TextElement("insert into " + introspectedTable.getFullyQualifiedTableNameAtRuntime())); - eleUpsert.addElement(XmlElementGeneratorTools.generateKeys(columns)); + for (Element element : XmlElementGeneratorTools.generateKeys(columns)) { + eleUpsert.addElement(element); + } eleUpsert.addElement(new TextElement("values")); - eleUpsert.addElement(XmlElementGeneratorTools.generateValues(columns)); + for (Element element : XmlElementGeneratorTools.generateValues(columns)) { + eleUpsert.addElement(element); + } eleUpsert.addElement(new TextElement("on duplicate key update ")); - eleUpsert.addElement(XmlElementGeneratorTools.generateSets(columns)); + for (Element element : XmlElementGeneratorTools.generateSets(columns)) { + eleUpsert.addElement(element); + } document.getRootElement().addElement(eleUpsert); logger.debug("itfsw(存在即更新插件):" + introspectedTable.getMyBatis3XmlMapperFileName() + "增加upsert实现方法。"); @@ -392,7 +402,7 @@ public class UpsertPlugin extends BasePlugin { document.getRootElement().addElement(eleUpsertSelective); logger.debug("itfsw(存在即更新插件):" + introspectedTable.getMyBatis3XmlMapperFileName() + "增加upsertSelective实现方法。"); - if (this.allowMultiQueries){ + if (this.allowMultiQueries) { // ====================================== 2. upsertByExample ====================================== XmlElement eleUpsertByExample = new XmlElement("insert"); eleUpsertByExample.addAttribute(new Attribute("id", METHOD_UPSERT_BY_EXAMPLE)); @@ -406,7 +416,9 @@ public class UpsertPlugin extends BasePlugin { // insert eleUpsertByExample.addElement(new TextElement("insert into " + introspectedTable.getFullyQualifiedTableNameAtRuntime())); - eleUpsertByExample.addElement(XmlElementGeneratorTools.generateKeys(columns)); + for (Element element : XmlElementGeneratorTools.generateKeys(columns)) { + eleUpsertByExample.addElement(element); + } this.generateExistsClause(introspectedTable, eleUpsertByExample, false, flag); // multiQueries @@ -415,7 +427,9 @@ public class UpsertPlugin extends BasePlugin { // update eleUpsertByExample.addElement(new TextElement("update " + introspectedTable.getAliasedFullyQualifiedTableNameAtRuntime())); eleUpsertByExample.addElement(new TextElement("set")); - eleUpsertByExample.addElement(XmlElementGeneratorTools.generateSets(ListUtilities.removeIdentityAndGeneratedAlwaysColumns(columns), "record.")); + for (Element element : XmlElementGeneratorTools.generateSets(ListUtilities.removeIdentityAndGeneratedAlwaysColumns(columns), "record.")) { + eleUpsertByExample.addElement(element); + } // update where eleUpsertByExample.addElement(XmlElementGeneratorTools.getUpdateByExampleIncludeElement(introspectedTable)); @@ -456,20 +470,21 @@ public class UpsertPlugin extends BasePlugin { /** * exists 语句 - * * @param introspectedTable * @param element * @param selective * @param allColumns */ - private void generateExistsClause(IntrospectedTable introspectedTable, XmlElement element, boolean selective, boolean allColumns){ + private void generateExistsClause(IntrospectedTable introspectedTable, XmlElement element, boolean selective, boolean allColumns) { List columns = allColumns ? introspectedTable.getAllColumns() : introspectedTable.getNonBLOBColumns(); element.addElement(new TextElement("select")); - if (selective){ + if (selective) { element.addElement(XmlElementGeneratorTools.generateValuesSelective(columns, "record.", false)); } else { - element.addElement(XmlElementGeneratorTools.generateValues(columns, "record.", false)); + for (Element element1 : XmlElementGeneratorTools.generateValues(columns, "record.", false)) { + element.addElement(element1); + } } element.addElement(new TextElement("from dual where not exists")); element.addElement(new TextElement("(")); diff --git a/src/main/java/com/itfsw/mybatis/generator/plugins/utils/XmlElementGeneratorTools.java b/src/main/java/com/itfsw/mybatis/generator/plugins/utils/XmlElementGeneratorTools.java index 94f95ad..b7d2107 100644 --- a/src/main/java/com/itfsw/mybatis/generator/plugins/utils/XmlElementGeneratorTools.java +++ b/src/main/java/com/itfsw/mybatis/generator/plugins/utils/XmlElementGeneratorTools.java @@ -18,6 +18,7 @@ package com.itfsw.mybatis.generator.plugins.utils; import org.mybatis.generator.api.IntrospectedColumn; import org.mybatis.generator.api.IntrospectedTable; +import org.mybatis.generator.api.dom.OutputUtilities; import org.mybatis.generator.api.dom.xml.Attribute; import org.mybatis.generator.api.dom.xml.Element; import org.mybatis.generator.api.dom.xml.TextElement; @@ -50,11 +51,11 @@ public class XmlElementGeneratorTools { String identityColumnType = introspectedColumn .getFullyQualifiedJavaType().getFullyQualifiedName(); - XmlElement answer = new XmlElement("selectKey"); - answer.addAttribute(new Attribute("resultType", identityColumnType)); + XmlElement answer = new XmlElement("selectKey"); + answer.addAttribute(new Attribute("resultType", identityColumnType)); answer.addAttribute(new Attribute( - "keyProperty", introspectedColumn.getJavaProperty())); - answer.addAttribute(new Attribute("order", + "keyProperty", introspectedColumn.getJavaProperty())); + answer.addAttribute(new Attribute("order", generatedKey.getMyBatis3Order())); answer.addElement(new TextElement(generatedKey @@ -64,25 +65,25 @@ public class XmlElementGeneratorTools { } public static Element getBaseColumnListElement(IntrospectedTable introspectedTable) { - XmlElement answer = new XmlElement("include"); - answer.addAttribute(new Attribute("refid", + XmlElement answer = new XmlElement("include"); + answer.addAttribute(new Attribute("refid", introspectedTable.getBaseColumnListId())); return answer; } public static Element getBlobColumnListElement(IntrospectedTable introspectedTable) { - XmlElement answer = new XmlElement("include"); - answer.addAttribute(new Attribute("refid", + XmlElement answer = new XmlElement("include"); + answer.addAttribute(new Attribute("refid", introspectedTable.getBlobColumnListId())); return answer; } public static Element getExampleIncludeElement(IntrospectedTable introspectedTable) { - XmlElement ifElement = new XmlElement("if"); - ifElement.addAttribute(new Attribute("test", "_parameter != null")); + XmlElement ifElement = new XmlElement("if"); + ifElement.addAttribute(new Attribute("test", "_parameter != null")); - XmlElement includeElement = new XmlElement("include"); - includeElement.addAttribute(new Attribute("refid", + XmlElement includeElement = new XmlElement("include"); + includeElement.addAttribute(new Attribute("refid", introspectedTable.getExampleWhereClauseId())); ifElement.addElement(includeElement); @@ -90,11 +91,11 @@ public class XmlElementGeneratorTools { } public static Element getUpdateByExampleIncludeElement(IntrospectedTable introspectedTable) { - XmlElement ifElement = new XmlElement("if"); - ifElement.addAttribute(new Attribute("test", "_parameter != null")); + XmlElement ifElement = new XmlElement("if"); + ifElement.addAttribute(new Attribute("test", "_parameter != null")); - XmlElement includeElement = new XmlElement("include"); - includeElement.addAttribute(new Attribute("refid", + XmlElement includeElement = new XmlElement("include"); + includeElement.addAttribute(new Attribute("refid", introspectedTable.getMyBatis3UpdateByExampleWhereClauseId())); ifElement.addElement(includeElement); @@ -103,22 +104,20 @@ public class XmlElementGeneratorTools { /** * 使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。所以只支持MYSQL和SQLServer - * * @param element * @param introspectedTable */ - public static void useGeneratedKeys(XmlElement element, IntrospectedTable introspectedTable){ + public static void useGeneratedKeys(XmlElement element, IntrospectedTable introspectedTable) { useGeneratedKeys(element, introspectedTable, null); } /** * 使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。所以只支持MYSQL和SQLServer - * * @param element * @param introspectedTable * @param prefix */ - public static void useGeneratedKeys(XmlElement element, IntrospectedTable introspectedTable, String prefix){ + public static void useGeneratedKeys(XmlElement element, IntrospectedTable introspectedTable, String prefix) { GeneratedKey gk = introspectedTable.getGeneratedKey(); if (gk != null) { IntrospectedColumn introspectedColumn = introspectedTable.getColumn(gk.getColumn()); @@ -126,9 +125,9 @@ public class XmlElementGeneratorTools { // warning has already been reported if (introspectedColumn != null) { // 使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。所以只支持MYSQL和SQLServer - element.addAttribute(new Attribute("useGeneratedKeys", "true")); - element.addAttribute(new Attribute("keyProperty", (prefix == null ? "" : prefix) + introspectedColumn.getJavaProperty())); - element.addAttribute(new Attribute("keyColumn", introspectedColumn.getActualColumnName())); + element.addAttribute(new Attribute("useGeneratedKeys", "true")); + element.addAttribute(new Attribute("keyProperty", (prefix == null ? "" : prefix) + introspectedColumn.getJavaProperty())); + element.addAttribute(new Attribute("keyColumn", introspectedColumn.getActualColumnName())); } } } @@ -138,7 +137,7 @@ public class XmlElementGeneratorTools { * @param columns * @return */ - public static Element generateKeys(List columns) { + public static List generateKeys(List columns) { return generateKeys(columns, true); } @@ -148,7 +147,7 @@ public class XmlElementGeneratorTools { * @param bracket * @return */ - public static Element generateKeys(List columns, boolean bracket) { + public static List generateKeys(List columns, boolean bracket) { return generateCommColumns(columns, null, bracket, 1); } @@ -187,7 +186,7 @@ public class XmlElementGeneratorTools { * @param columns * @return */ - public static Element generateValues(List columns) { + public static List generateValues(List columns) { return generateValues(columns, null); } @@ -197,7 +196,7 @@ public class XmlElementGeneratorTools { * @param prefix * @return */ - public static Element generateValues(List columns, String prefix) { + public static List generateValues(List columns, String prefix) { return generateValues(columns, prefix, true); } @@ -208,7 +207,7 @@ public class XmlElementGeneratorTools { * @param bracket * @return */ - public static Element generateValues(List columns, String prefix, boolean bracket) { + public static List generateValues(List columns, String prefix, boolean bracket) { return generateCommColumns(columns, prefix, bracket, 2); } @@ -247,7 +246,7 @@ public class XmlElementGeneratorTools { * @param columns * @return */ - public static Element generateSets(List columns) { + public static List generateSets(List columns) { return generateSets(columns, null, false); } @@ -257,7 +256,7 @@ public class XmlElementGeneratorTools { * @param prefix * @return */ - public static Element generateSets(List columns, String prefix) { + public static List generateSets(List columns, String prefix) { return generateSets(columns, prefix, false); } @@ -268,7 +267,7 @@ public class XmlElementGeneratorTools { * @param bracket * @return */ - public static Element generateSets(List columns, String prefix, boolean bracket) { + public static List generateSets(List columns, String prefix, boolean bracket) { return generateCommColumns(columns, prefix, bracket, 3); } @@ -310,8 +309,9 @@ public class XmlElementGeneratorTools { * @param type 1:key,2:value,3:set * @return */ - private static Element generateCommColumns(List columns, String prefix, boolean bracket, int type) { - StringBuffer sb = new StringBuffer(bracket ? "(" : ""); + private static List generateCommColumns(List columns, String prefix, boolean bracket, int type) { + List list = new ArrayList<>(); + StringBuilder sb = new StringBuilder(bracket ? "(" : ""); Iterator columnIterator = columns.iterator(); while (columnIterator.hasNext()) { IntrospectedColumn introspectedColumn = columnIterator.next(); @@ -333,9 +333,24 @@ public class XmlElementGeneratorTools { if (columnIterator.hasNext()) { sb.append(", "); } + + // 保持和官方一致 80 进行换行 + if (type == 1 || type == 2) { + if (sb.length() > 80) { + list.add(new TextElement(sb.toString())); + sb.setLength(0); + OutputUtilities.xmlIndent(sb, 1); + } + } else { + list.add(new TextElement(sb.toString())); + sb.setLength(0); + } + } + if (sb.length() > 0 || bracket){ + list.add(new TextElement(sb.append(bracket ? ")" : "").toString())); } - return new TextElement(sb.append(bracket ? ")" : "").toString()); + return list; } /** @@ -380,12 +395,11 @@ public class XmlElementGeneratorTools { /** * 查找指定xml节点下指定节点名称的元素 - * * @param xmlElement * @param name * @return */ - public static List findXmlElements(XmlElement xmlElement, String name){ + public static List findXmlElements(XmlElement xmlElement, String name) { List list = new ArrayList<>(); List elements = xmlElement.getElements(); for (Element ele : elements) {