Commit fbecf4ce authored by hewei's avatar hewei

美化xml输出格式,实现和官方一致80换行,便于阅读

parent f62d78d1
......@@ -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);
......
......@@ -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;
......@@ -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());
......@@ -138,7 +137,7 @@ public class XmlElementGeneratorTools {
* @param columns
* @return
*/
public static Element generateKeys(List<IntrospectedColumn> columns) {
public static List<Element> generateKeys(List<IntrospectedColumn> columns) {
return generateKeys(columns, true);
}
......@@ -148,7 +147,7 @@ public class XmlElementGeneratorTools {
* @param bracket
* @return
*/
public static Element generateKeys(List<IntrospectedColumn> columns, boolean bracket) {
public static List<Element> generateKeys(List<IntrospectedColumn> columns, boolean bracket) {
return generateCommColumns(columns, null, bracket, 1);
}
......@@ -187,7 +186,7 @@ public class XmlElementGeneratorTools {
* @param columns
* @return
*/
public static Element generateValues(List<IntrospectedColumn> columns) {
public static List<Element> generateValues(List<IntrospectedColumn> columns) {
return generateValues(columns, null);
}
......@@ -197,7 +196,7 @@ public class XmlElementGeneratorTools {
* @param prefix
* @return
*/
public static Element generateValues(List<IntrospectedColumn> columns, String prefix) {
public static List<Element> generateValues(List<IntrospectedColumn> columns, String prefix) {
return generateValues(columns, prefix, true);
}
......@@ -208,7 +207,7 @@ public class XmlElementGeneratorTools {
* @param bracket
* @return
*/
public static Element generateValues(List<IntrospectedColumn> columns, String prefix, boolean bracket) {
public static List<Element> generateValues(List<IntrospectedColumn> 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<IntrospectedColumn> columns) {
public static List<Element> generateSets(List<IntrospectedColumn> columns) {
return generateSets(columns, null, false);
}
......@@ -257,7 +256,7 @@ public class XmlElementGeneratorTools {
* @param prefix
* @return
*/
public static Element generateSets(List<IntrospectedColumn> columns, String prefix) {
public static List<Element> generateSets(List<IntrospectedColumn> columns, String prefix) {
return generateSets(columns, prefix, false);
}
......@@ -268,7 +267,7 @@ public class XmlElementGeneratorTools {
* @param bracket
* @return
*/
public static Element generateSets(List<IntrospectedColumn> columns, String prefix, boolean bracket) {
public static List<Element> generateSets(List<IntrospectedColumn> 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<IntrospectedColumn> columns, String prefix, boolean bracket, int type) {
StringBuffer sb = new StringBuffer(bracket ? "(" : "");
private static List<Element> generateCommColumns(List<IntrospectedColumn> columns, String prefix, boolean bracket, int type) {
List<Element> list = new ArrayList<>();
StringBuilder sb = new StringBuilder(bracket ? "(" : "");
Iterator<IntrospectedColumn> 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<XmlElement> findXmlElements(XmlElement xmlElement, String name){
public static List<XmlElement> findXmlElements(XmlElement xmlElement, String name) {
List<XmlElement> list = new ArrayList<>();
List<Element> elements = xmlElement.getElements();
for (Element ele : elements) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment