upsert 插件key,value,set启用单独方法,防止和别的插件冲突
This commit is contained in:
@@ -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
-4
@@ -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);
|
||||
|
||||
+45
-1
@@ -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) {
|
||||
|
||||
+3
-3
@@ -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){
|
||||
|
||||
Reference in New Issue
Block a user