Commit 01f5e51b authored by hewei's avatar hewei

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

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