From 5126a75747f2c8cd14947e521e1906b7aa8b45a2 Mon Sep 17 00:00:00 2001 From: hewei Date: Thu, 31 May 2018 13:30:27 +0800 Subject: [PATCH] =?UTF-8?q?bug:SelectiveEnhancedPlugin=E5=AF=B9=E4=BA=8E?= =?UTF-8?q?=E8=87=AA=E5=A2=9E=E4=B8=BB=E9=94=AE=E8=BF=94=E5=9B=9E=E5=AD=98?= =?UTF-8?q?=E5=9C=A8=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugins/SelectiveEnhancedPlugin.java | 6 +- .../utils/XmlElementGeneratorTools.java | 6 +- .../generator/plugins/BugFixedTest.java | 31 ++++++++++ .../scripts/BugFixedTest/bug-0002.sql | 26 +++++++++ .../scripts/BugFixedTest/bug-0002.xml | 57 +++++++++++++++++++ 5 files changed, 121 insertions(+), 5 deletions(-) create mode 100644 src/test/resources/scripts/BugFixedTest/bug-0002.sql create mode 100644 src/test/resources/scripts/BugFixedTest/bug-0002.xml 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 dc76d5a..d7f49d3 100644 --- a/src/main/java/com/itfsw/mybatis/generator/plugins/SelectiveEnhancedPlugin.java +++ b/src/main/java/com/itfsw/mybatis/generator/plugins/SelectiveEnhancedPlugin.java @@ -169,11 +169,9 @@ public class SelectiveEnhancedPlugin extends BasePlugin implements IUpsertPlugin // warning has already been reported if (introspectedColumn != null) { if (gk.isJdbcStandard()) { - answer.addAttribute(new Attribute("useGeneratedKeys", "true")); - answer.addAttribute(new Attribute("keyProperty", introspectedColumn.getJavaProperty())); - answer.addAttribute(new Attribute("keyColumn", introspectedColumn.getActualColumnName())); + XmlElementGeneratorTools.useGeneratedKeys(answer, introspectedTable, "record."); } else { - answer.addElement(XmlElementGeneratorTools.getSelectKey(introspectedColumn, gk)); + answer.addElement(XmlElementGeneratorTools.getSelectKey(introspectedColumn, gk, "record.")); } } } diff --git a/src/main/java/com/itfsw/mybatis/generator/plugins/utils/XmlElementGeneratorTools.java b/src/main/java/com/itfsw/mybatis/generator/plugins/utils/XmlElementGeneratorTools.java index 16cce01..81a979c 100644 --- a/src/main/java/com/itfsw/mybatis/generator/plugins/utils/XmlElementGeneratorTools.java +++ b/src/main/java/com/itfsw/mybatis/generator/plugins/utils/XmlElementGeneratorTools.java @@ -52,11 +52,15 @@ public class XmlElementGeneratorTools { * @return the selectKey element */ public static Element getSelectKey(IntrospectedColumn introspectedColumn, GeneratedKey generatedKey) { + return getSelectKey(introspectedColumn, generatedKey, null); + } + + public static Element getSelectKey(IntrospectedColumn introspectedColumn, GeneratedKey generatedKey, String prefix) { String identityColumnType = introspectedColumn.getFullyQualifiedJavaType().getFullyQualifiedName(); XmlElement answer = new XmlElement("selectKey"); answer.addAttribute(new Attribute("resultType", identityColumnType)); - answer.addAttribute(new Attribute("keyProperty", introspectedColumn.getJavaProperty())); + answer.addAttribute(new Attribute("keyProperty", (prefix == null ? "" : prefix) + introspectedColumn.getJavaProperty())); answer.addAttribute(new Attribute("order", generatedKey.getMyBatis3Order())); answer.addElement(new TextElement(generatedKey.getRuntimeSqlStatement())); diff --git a/src/test/java/com/itfsw/mybatis/generator/plugins/BugFixedTest.java b/src/test/java/com/itfsw/mybatis/generator/plugins/BugFixedTest.java index 860f317..4d22b3b 100644 --- a/src/test/java/com/itfsw/mybatis/generator/plugins/BugFixedTest.java +++ b/src/test/java/com/itfsw/mybatis/generator/plugins/BugFixedTest.java @@ -76,4 +76,35 @@ public class BugFixedTest { } }); } + + /** + * insertSelective 因为集成SelectiveEnhancedPlugin,传入参数变成map,自增ID返回要修正 + * @throws Exception + */ + @Test + public void bug0002() throws Exception { + MyBatisGeneratorTool tool = MyBatisGeneratorTool.create("scripts/BugFixedTest/bug-0002.xml"); + tool.generate(() -> DBHelper.createDB("scripts/BugFixedTest/bug-0002.sql"), new AbstractShellCallback() { + @Override + public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception { + ObjectUtil tbMapper = new ObjectUtil(sqlSession.getMapper(loader.loadClass(packagz + ".TbMapper"))); + + ObjectUtil tb = new ObjectUtil(loader, packagz + ".Tb"); + tb.set("field1", "ts1"); + + // selective + ObjectUtil TbColumnField1 = new ObjectUtil(loader, packagz + ".Tb$Column#field1"); + Object columns = Array.newInstance(TbColumnField1.getCls(), 1); + Array.set(columns, 0, TbColumnField1.getObject()); + + // sql + String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "insertSelective", tb.getObject(), columns); + Assert.assertEquals(sql, "insert into tb ( field1 ) values ( 'ts1' )"); + Object result = tbMapper.invoke("insertSelective", tb.getObject(), columns); + Assert.assertEquals(result, 1); + // 自增ID + Assert.assertEquals(tb.get("id"), 1L); + } + }); + } } diff --git a/src/test/resources/scripts/BugFixedTest/bug-0002.sql b/src/test/resources/scripts/BugFixedTest/bug-0002.sql new file mode 100644 index 0000000..bbda96c --- /dev/null +++ b/src/test/resources/scripts/BugFixedTest/bug-0002.sql @@ -0,0 +1,26 @@ +/* +Navicat MySQL Data Transfer + +Source Server : localhost +Source Server Version : 50617 +Source Host : localhost:3306 +Source Database : mybatis-generator-plugin + +Target Server Type : MYSQL +Target Server Version : 50617 +File Encoding : 65001 + +Date: 2017-06-27 11:17:08 +*/ + +SET FOREIGN_KEY_CHECKS=0; + +-- ---------------------------- +-- Table structure for tb +-- ---------------------------- +DROP TABLE IF EXISTS `tb`; +CREATE TABLE `tb` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '注释1', + `field1` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; \ No newline at end of file diff --git a/src/test/resources/scripts/BugFixedTest/bug-0002.xml b/src/test/resources/scripts/BugFixedTest/bug-0002.xml new file mode 100644 index 0000000..68f1a62 --- /dev/null +++ b/src/test/resources/scripts/BugFixedTest/bug-0002.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
\ No newline at end of file