From ba044ccdfcbf40264edf237156e79e9ae3bc6782 Mon Sep 17 00:00:00 2001 From: hewei Date: Fri, 21 Apr 2017 14:28:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0SelectiveEnhancedPlugin?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugins/SelectiveEnhancedPlugin.java | 47 +++++++++++++++++-- .../generator/plugins/UpsertPlugin.java | 4 +- 2 files changed, 44 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/itfsw/mybatis/generator/plugins/SelectiveEnhancedPlugin.java b/src/main/java/com/itfsw/mybatis/generator/plugins/SelectiveEnhancedPlugin.java index f137881..fe66500 100644 --- a/src/main/java/com/itfsw/mybatis/generator/plugins/SelectiveEnhancedPlugin.java +++ b/src/main/java/com/itfsw/mybatis/generator/plugins/SelectiveEnhancedPlugin.java @@ -18,10 +18,12 @@ package com.itfsw.mybatis.generator.plugins; import com.itfsw.mybatis.generator.plugins.utils.CommentTools; import com.itfsw.mybatis.generator.plugins.utils.PluginTools; +import org.mybatis.generator.api.IntrospectedColumn; import org.mybatis.generator.api.IntrospectedTable; import org.mybatis.generator.api.PluginAdapter; import org.mybatis.generator.api.dom.java.*; import org.mybatis.generator.api.dom.xml.*; +import org.mybatis.generator.codegen.mybatis3.MyBatis3FormattingUtilities; import org.mybatis.generator.internal.util.StringUtility; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -150,7 +152,7 @@ public class SelectiveEnhancedPlugin extends PluginAdapter { if ("updateByExampleSelective".equals(id)) { List eles = this.findEle(xmlElement, "set"); for (XmlElement ele : eles) { - this.replaceEle(ele, "_parameter."); + this.replaceEle(ele, "record."); } } // ====================================== 3. updateByPrimaryKeySelective ====================================== @@ -170,12 +172,13 @@ public class SelectiveEnhancedPlugin extends PluginAdapter { // ====================================== 5. upsertByExampleSelective ====================================== if ("upsertByExampleSelective".equals(id)) { List eles = this.findEle(xmlElement, "trim"); - for (XmlElement ele : eles) { - this.replaceEle(ele, "_parameter."); - } + this.replaceEle(eles.get(0), "record."); + // upsertByExampleSelective的第二个trim比较特殊,需另行处理 + this.replaceEleForUpsertByExampleSelective(eles.get(1), "record.", introspectedTable); + List eles1 = this.findEle(xmlElement, "set"); for (XmlElement ele : eles1) { - this.replaceEle(ele, "_parameter."); + this.replaceEle(ele, "record."); } } @@ -258,4 +261,38 @@ public class SelectiveEnhancedPlugin extends PluginAdapter { element.getElements().clear(); element.addElement(chooseEle); } + + /** + * 替换节点upsertByExampleSelective if信息 + * @param element + * @param prefix + * @param introspectedTable + */ + private void replaceEleForUpsertByExampleSelective(XmlElement element, String prefix, IntrospectedTable introspectedTable) { + // choose + XmlElement chooseEle = new XmlElement("choose"); + // when + XmlElement whenEle = new XmlElement("when"); + whenEle.addAttribute(new Attribute("test", prefix + "isSelective()")); + for (IntrospectedColumn introspectedColumn : introspectedTable.getAllColumns()) { + XmlElement eleIf = new XmlElement("if"); + eleIf.addAttribute(new Attribute("test", prefix + "isSelective(\'" + MyBatis3FormattingUtilities.getEscapedColumnName(introspectedColumn) + "\')")); + + eleIf.addElement(new TextElement(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn, prefix) + ",")); + whenEle.addElement(eleIf); + } + + // otherwise + XmlElement otherwiseEle = new XmlElement("otherwise"); + for (Element ele : element.getElements()) { + otherwiseEle.addElement(ele); + } + + chooseEle.addElement(whenEle); + chooseEle.addElement(otherwiseEle); + + // 清空原始节点,新增choose节点 + element.getElements().clear(); + element.addElement(chooseEle); + } } diff --git a/src/main/java/com/itfsw/mybatis/generator/plugins/UpsertPlugin.java b/src/main/java/com/itfsw/mybatis/generator/plugins/UpsertPlugin.java index 5c6a7eb..c8dd5a0 100644 --- a/src/main/java/com/itfsw/mybatis/generator/plugins/UpsertPlugin.java +++ b/src/main/java/com/itfsw/mybatis/generator/plugins/UpsertPlugin.java @@ -119,7 +119,7 @@ public class UpsertPlugin extends PluginAdapter { // ====================================== 3. upsertByExample ====================================== Method mUpsertByExample = new Method(METHOD_UPSERT_BY_EXAMPLE); // 返回值类型 - mUpsertByExample.setReturnType(null); + mUpsertByExample.setReturnType(FullyQualifiedJavaType.getIntInstance()); // 添加参数 mUpsertByExample.addParameter(new Parameter(introspectedTable.getRules().calculateAllFieldsClass(), "record", "@Param(\"record\")")); mUpsertByExample.addParameter(new Parameter(new FullyQualifiedJavaType(introspectedTable.getExampleType()), "example", "@Param(\"example\")")); @@ -132,7 +132,7 @@ public class UpsertPlugin extends PluginAdapter { // ====================================== 4. upsertByExampleSelective ====================================== Method mUpsertByExampleSelective = new Method(METHOD_UPSERT_BY_EXAMPLE_SELECTIVE); // 返回值类型 - mUpsertByExampleSelective.setReturnType(null); + mUpsertByExampleSelective.setReturnType(FullyQualifiedJavaType.getIntInstance()); // 添加参数 mUpsertByExampleSelective.addParameter(new Parameter(introspectedTable.getRules().calculateAllFieldsClass(), "record", "@Param(\"record\")")); mUpsertByExampleSelective.addParameter(new Parameter(new FullyQualifiedJavaType(introspectedTable.getExampleType()), "example", "@Param(\"example\")"));