Commit 09065650 authored by hewei's avatar hewei

重构代码插件依赖关系

parent c33616c4
......@@ -339,7 +339,17 @@ public class SelectiveEnhancedPlugin extends BasePlugin implements IUpsertPlugin
*/
@Override
public boolean sqlMapUpsertByExampleSelectiveElementGenerated(XmlElement element, List<IntrospectedColumn> columns, XmlElement insertColumnsEle, XmlElement insertValuesEle, XmlElement setsEle, IntrospectedTable introspectedTable) {
return false;
// 替换insert column
XmlElementGeneratorTools.replaceXmlElement(insertColumnsEle, this.generateInsertColumnSelective(columns));
// 替换insert values
XmlElementGeneratorTools.replaceXmlElement(insertValuesEle, this.generateInsertValuesSelective(columns, false));
// 替换update set
XmlElementGeneratorTools.replaceXmlElement(setsEle, this.generateSetsSelective(columns));
return true;
}
// ====================================================== 一些私有节点生成方法 =========================================================
......@@ -384,6 +394,16 @@ public class SelectiveEnhancedPlugin extends BasePlugin implements IUpsertPlugin
* @return
*/
private XmlElement generateInsertValuesSelective(List<IntrospectedColumn> columns) {
return generateInsertValuesSelective(columns, true);
}
/**
* insert column selective
* @param columns
* @param bracket
* @return
*/
private XmlElement generateInsertValuesSelective(List<IntrospectedColumn> columns, boolean bracket) {
XmlElement insertValuesChooseEle = new XmlElement("choose");
XmlElement valuesWhenEle = new XmlElement("when");
......@@ -393,15 +413,17 @@ public class SelectiveEnhancedPlugin extends BasePlugin implements IUpsertPlugin
XmlElement valuesForeachEle = new XmlElement("foreach");
valuesForeachEle.addAttribute(new Attribute("collection", "selective"));
valuesForeachEle.addAttribute(new Attribute("item", "column"));
valuesForeachEle.addAttribute(new Attribute("open", "("));
valuesForeachEle.addAttribute(new Attribute("separator", ","));
if (bracket) {
valuesForeachEle.addAttribute(new Attribute("open", "("));
valuesForeachEle.addAttribute(new Attribute("close", ")"));
}
valuesForeachEle.addElement(new TextElement("#{record.${column.javaProperty},jdbcType=${column.jdbcType}}"));
valuesWhenEle.addElement(valuesForeachEle);
XmlElement valuesOtherwiseEle = new XmlElement("otherwise");
insertValuesChooseEle.addElement(valuesOtherwiseEle);
valuesOtherwiseEle.addElement(XmlElementGeneratorTools.generateValuesSelective(columns, "record."));
valuesOtherwiseEle.addElement(XmlElementGeneratorTools.generateValuesSelective(columns, "record.", bracket));
return insertValuesChooseEle;
}
......
......@@ -217,7 +217,7 @@ public class UpsertPlugin extends BasePlugin {
insertEle.addAttribute(new Attribute("parameterType", introspectedTable.getRules().calculateAllFieldsClass().getFullyQualifiedName()));
// 使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。所以只支持MYSQL和SQLServer
XmlElementGeneratorTools.useGeneratedKeys(insertEle, introspectedTable);
XmlElementGeneratorTools.useGeneratedKeys(insertEle, introspectedTable, "record.");
// insert
insertEle.addElement(new TextElement("insert into " + introspectedTable.getFullyQualifiedTableNameAtRuntime()));
......@@ -349,7 +349,7 @@ public class UpsertPlugin extends BasePlugin {
// insert
updateEle.addElement(new TextElement("insert into " + introspectedTable.getFullyQualifiedTableNameAtRuntime()));
for (Element element : XmlElementGeneratorTools.generateKeys(columns)) {
for (Element element : XmlElementGeneratorTools.generateKeys(columns, "record.")) {
updateEle.addElement(element);
}
this.generateExistsClause(introspectedTable, updateEle, XmlElementGeneratorTools.generateValues(columns, "record.", false));
......
......@@ -27,6 +27,7 @@ import org.mybatis.generator.codegen.mybatis3.MyBatis3FormattingUtilities;
import org.mybatis.generator.config.GeneratedKey;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
......@@ -151,7 +152,7 @@ public class XmlElementGeneratorTools {
* @param element
* @param name
*/
public static void removeAttribute(XmlElement element, String name){
public static void removeAttribute(XmlElement element, String name) {
Iterator<Attribute> iterator = element.getAttributes().iterator();
while (iterator.hasNext()) {
Attribute attribute = iterator.next();
......@@ -166,7 +167,7 @@ public class XmlElementGeneratorTools {
* @param element
* @param attribute
*/
public static void replaceAttribute(XmlElement element, Attribute attribute){
public static void replaceAttribute(XmlElement element, Attribute attribute) {
removeAttribute(element, attribute.getName());
element.addAttribute(attribute);
}
......@@ -176,7 +177,7 @@ public class XmlElementGeneratorTools {
* @param srcEle
* @param destEle
*/
public static void replaceXmlElement(XmlElement srcEle, XmlElement destEle){
public static void replaceXmlElement(XmlElement srcEle, XmlElement destEle) {
srcEle.setName(destEle.getName());
srcEle.getAttributes().clear();
srcEle.getAttributes().addAll(destEle.getAttributes());
......@@ -190,17 +191,28 @@ public class XmlElementGeneratorTools {
* @return
*/
public static List<Element> generateKeys(List<IntrospectedColumn> columns) {
return generateKeys(columns, true);
return generateKeys(columns, null);
}
/**
* 生成keys Ele
* @param columns
* @param prefix
* @return
*/
public static List<Element> generateKeys(List<IntrospectedColumn> columns, String prefix) {
return generateKeys(columns, prefix, true);
}
/**
* 生成keys Ele
* @param columns
* @param prefix
* @param bracket
* @return
*/
public static List<Element> generateKeys(List<IntrospectedColumn> columns, boolean bracket) {
return generateCommColumns(columns, null, bracket, 1);
public static List<Element> generateKeys(List<IntrospectedColumn> columns,String prefix, boolean bracket) {
return generateCommColumns(columns, prefix, bracket, 1);
}
/**
......@@ -361,8 +373,39 @@ public class XmlElementGeneratorTools {
* @param type 1:key,2:value,3:set
* @return
*/
public static List<Element> generateCommColumns(List<IntrospectedColumn> columns, String prefix, boolean bracket, int type) {
private static List<Element> generateCommColumns(List<IntrospectedColumn> columns, String prefix, boolean bracket, int type) {
List<Element> list = new ArrayList<>();
if (hasIdentityAndGeneratedAlwaysColumns(columns)) {
XmlElement eleTrim = new XmlElement("trim");
if (bracket) {
eleTrim.addAttribute(new Attribute("prefix", "("));
eleTrim.addAttribute(new Attribute("suffix", ")"));
eleTrim.addAttribute(new Attribute("suffixOverrides", ","));
} else {
eleTrim.addAttribute(new Attribute("suffixOverrides", ","));
}
for (IntrospectedColumn introspectedColumn : columns) {
if (introspectedColumn.isGeneratedAlways() || introspectedColumn.isIdentity()) {
generateSelectiveToTrimEle(eleTrim, introspectedColumn, prefix, type);
} else {
switch (type) {
case 3:
eleTrim.addElement(new TextElement(MyBatis3FormattingUtilities.getEscapedColumnName(introspectedColumn) + " = " + MyBatis3FormattingUtilities.getParameterClause(introspectedColumn, prefix) + ","));
break;
case 2:
eleTrim.addElement(new TextElement(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn, prefix) + ","));
break;
case 1:
eleTrim.addElement(new TextElement(MyBatis3FormattingUtilities.getEscapedColumnName(introspectedColumn) + ","));
break;
}
}
}
return Arrays.asList(eleTrim);
} else {
StringBuilder sb = new StringBuilder(bracket ? "(" : "");
Iterator<IntrospectedColumn> columnIterator = columns.iterator();
while (columnIterator.hasNext()) {
......@@ -404,6 +447,7 @@ public class XmlElementGeneratorTools {
return list;
}
}
/**
* 通用遍历columns
......@@ -424,6 +468,20 @@ public class XmlElementGeneratorTools {
}
for (IntrospectedColumn introspectedColumn : columns) {
generateSelectiveToTrimEle(eleTrim, introspectedColumn, prefix, type);
}
return eleTrim;
}
/**
* 生成选择列到trim 节点
* @param trimEle
* @param introspectedColumn
* @param prefix
* @param type 1:key,2:value,3:set
*/
private static void generateSelectiveToTrimEle(XmlElement trimEle, IntrospectedColumn introspectedColumn, String prefix, int type) {
if (type != 3 && (introspectedColumn.isSequenceColumn() || introspectedColumn.getFullyQualifiedJavaType().isPrimitive())) {
// if it is a sequence column, it is not optional
// This is required for MyBatis3 because MyBatis3 parses
......@@ -432,10 +490,10 @@ public class XmlElementGeneratorTools {
// if it is primitive, we cannot do a null check
switch (type) {
case 2:
eleTrim.addElement(new TextElement(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn, prefix) + ","));
trimEle.addElement(new TextElement(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn, prefix) + ","));
break;
case 1:
eleTrim.addElement(new TextElement(MyBatis3FormattingUtilities.getEscapedColumnName(introspectedColumn) + ","));
trimEle.addElement(new TextElement(MyBatis3FormattingUtilities.getEscapedColumnName(introspectedColumn) + ","));
break;
}
} else {
......@@ -454,13 +512,10 @@ public class XmlElementGeneratorTools {
break;
}
eleTrim.addElement(eleIf);
trimEle.addElement(eleIf);
}
}
return eleTrim;
}
/**
* 查找指定xml节点下指定节点名称的元素
* @param xmlElement
......@@ -516,4 +571,18 @@ public class XmlElementGeneratorTools {
element.addElement(new TextElement(sb.toString()));
}
}
/**
* 是否存在自增或者生成的column
* @param columns
* @return
*/
private static boolean hasIdentityAndGeneratedAlwaysColumns(List<IntrospectedColumn> columns) {
for (IntrospectedColumn ic : columns) {
if (ic.isGeneratedAlways() || ic.isIdentity()) {
return true;
}
}
return false;
}
}
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