Commit 01f5e51b authored by hewei's avatar hewei

upsert 插件key,value,set启用单独方法,防止和别的插件冲突

parent e8c4641f
......@@ -304,16 +304,16 @@ public class UpsertPlugin extends BasePlugin {
// insert
insertEle.addElement(new TextElement("insert into " + introspectedTable.getFullyQualifiedTableNameAtRuntime()));
for (Element element : XmlElementGeneratorTools.generateKeys(columns)) {
for (Element element : XmlElementGeneratorTools.generateUpsertKeys(columns, null)) {
insertEle.addElement(element);
}
insertEle.addElement(new TextElement("values"));
for (Element element : XmlElementGeneratorTools.generateValues(columns)) {
for (Element element : XmlElementGeneratorTools.generateUpsertValues(columns, null, true)) {
insertEle.addElement(element);
}
insertEle.addElement(new TextElement("on duplicate key update "));
// set
for (Element set : XmlElementGeneratorTools.generateSets(columns)) {
for (Element set : XmlElementGeneratorTools.generateUpsertSets(columns, null)) {
insertEle.addElement(set);
}
......@@ -337,7 +337,7 @@ public class UpsertPlugin extends BasePlugin {
updateEle.addElement(new TextElement("update " + introspectedTable.getAliasedFullyQualifiedTableNameAtRuntime()));
updateEle.addElement(new TextElement("set"));
// set
for (Element set : XmlElementGeneratorTools.generateSets(columns, "record.")) {
for (Element set : XmlElementGeneratorTools.generateUpsertSets(columns, "record.")) {
updateEle.addElement(set);
}
......@@ -349,10 +349,10 @@ public class UpsertPlugin extends BasePlugin {
// insert
updateEle.addElement(new TextElement("insert into " + introspectedTable.getFullyQualifiedTableNameAtRuntime()));
for (Element element : XmlElementGeneratorTools.generateKeys(columns, "record.")) {
for (Element element : XmlElementGeneratorTools.generateUpsertKeys(columns, "record.")) {
updateEle.addElement(element);
}
this.generateExistsClause(introspectedTable, updateEle, XmlElementGeneratorTools.generateValues(columns, "record.", false));
this.generateExistsClause(introspectedTable, updateEle, XmlElementGeneratorTools.generateUpsertValues(columns, "record.", false));
document.getRootElement().addElement(updateEle);
logger.debug("itfsw(存在即更新插件):" + introspectedTable.getMyBatis3XmlMapperFileName() + "增加upsertByExample实现方法。");
......
......@@ -17,6 +17,7 @@
package com.itfsw.mybatis.generator.plugins.utils;
import com.itfsw.mybatis.generator.plugins.ExampleTargetPlugin;
import org.mybatis.generator.api.FullyQualifiedTable;
import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.config.Context;
......@@ -24,7 +25,9 @@ import org.mybatis.generator.config.JavaModelGeneratorConfiguration;
import org.mybatis.generator.config.PluginConfiguration;
import org.mybatis.generator.internal.util.StringUtility;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* ---------------------------------------------------------------------------
......@@ -49,12 +52,22 @@ public class IntrospectedTableTools {
introspectedTable.getTableConfiguration().setDomainObjectName(domainObjectName);
// FullyQualifiedTable修正
BeanUtils.setProperty(introspectedTable.getFullyQualifiedTable(), "domainObjectName", domainObjectName);
Field domainObjectNameField = FullyQualifiedTable.class.getDeclaredField("domainObjectName");
domainObjectNameField.setAccessible(true);
domainObjectNameField.set(introspectedTable.getFullyQualifiedTable(), domainObjectName);
// 重新修正introspectedTable属性信息
BeanUtils.invoke(introspectedTable, "calculateJavaClientAttributes");
BeanUtils.invoke(introspectedTable, "calculateModelAttributes");
BeanUtils.invoke(introspectedTable, "calculateXmlAttributes");
Method calculateJavaClientAttributes = IntrospectedTable.class.getDeclaredMethod("calculateJavaClientAttributes");
calculateJavaClientAttributes.setAccessible(true);
calculateJavaClientAttributes.invoke(introspectedTable);
Method calculateModelAttributes = IntrospectedTable.class.getDeclaredMethod("calculateModelAttributes");
calculateModelAttributes.setAccessible(true);
calculateModelAttributes.invoke(introspectedTable);
Method calculateXmlAttributes = IntrospectedTable.class.getDeclaredMethod("calculateXmlAttributes");
calculateXmlAttributes.setAccessible(true);
calculateXmlAttributes.invoke(introspectedTable);
// 注意!! 如果配置了ExampleTargetPlugin插件,要修正Example 位置
PluginConfiguration configuration = PluginTools.getPluginConfiguration(context, ExampleTargetPlugin.class);
......
......@@ -284,6 +284,37 @@ public class XmlElementGeneratorTools {
return generateCommColumnsSelective(columns, prefix, false, 3);
}
/**
* 生成keys Ele (upsert)
* @param columns
* @param prefix
* @return
*/
public static List<Element> generateUpsertKeys(List<IntrospectedColumn> columns, String prefix) {
return generateCommColumns(columns, prefix, true, 1, true);
}
/**
* 生成values Ele (upsert)
* @param columns
* @param prefix
* @param bracket
* @return
*/
public static List<Element> generateUpsertValues(List<IntrospectedColumn> columns, String prefix, boolean bracket) {
return generateCommColumns(columns, prefix, bracket, 2, true);
}
/**
* 生成sets Ele (upsert)
* @param columns
* @param prefix
* @return
*/
public static List<Element> generateUpsertSets(List<IntrospectedColumn> columns, String prefix) {
return generateCommColumns(columns, prefix, false, 3, true);
}
/**
* 通用遍历columns
* @param columns
......@@ -293,10 +324,23 @@ public class XmlElementGeneratorTools {
* @return
*/
private static List<Element> generateCommColumns(List<IntrospectedColumn> columns, String prefix, boolean bracket, int type) {
return generateCommColumns(columns, prefix, bracket, type, false);
}
/**
* 通用遍历columns
* @param columns
* @param prefix
* @param bracket
* @param type 1:key,2:value,3:set
* @param upsert
* @return
*/
private static List<Element> generateCommColumns(List<IntrospectedColumn> columns, String prefix, boolean bracket, int type, boolean upsert) {
List<Element> list = new ArrayList<>();
// 只有upsert插件才会传入 IdentityAndGeneratedAlwaysColumn
if (hasIdentityAndGeneratedAlwaysColumns(columns)) {
if (upsert && hasIdentityAndGeneratedAlwaysColumns(columns)) {
XmlElement trimEle = generateTrim(bracket);
for (IntrospectedColumn introspectedColumn : columns) {
......
......@@ -16,7 +16,6 @@
package com.itfsw.mybatis.generator.plugins.utils.enhanced;
import com.itfsw.mybatis.generator.plugins.utils.BeanUtils;
import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -41,9 +40,10 @@ public class InnerTypeFullyQualifiedJavaType extends FullyQualifiedJavaType {
try{
// 修正package
java.lang.reflect.Field packageName = this.getClass().getSuperclass().getDeclaredField("packageName");
packageName.setAccessible(true);
String oldPackageName = getPackageName();
BeanUtils.setProperty(this, "packageName", oldPackageName.substring(0, oldPackageName.lastIndexOf(".")));
packageName.set(this, oldPackageName.substring(0, oldPackageName.lastIndexOf(".")));
outerType = oldPackageName.substring(oldPackageName.lastIndexOf(".") + 1);
} catch (Exception e){
......
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