From 8922abde34bf23a913183f2651fe349ddc53e7b2 Mon Sep 17 00:00:00 2001 From: hewei Date: Wed, 31 Oct 2018 15:53:01 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B9=90=E8=A7=82=E9=94=81=E9=85=8D=E5=90=88?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E5=88=A0=E9=99=A4=E6=8F=92=E4=BB=B6=E4=BD=BF?= =?UTF-8?q?=E7=94=A8,=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B=E8=A1=A5?= =?UTF-8?q?=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugins/LogicalDeletePlugin.java | 44 ++----------- .../plugins/OptimisticLockerPlugin.java | 19 +----- .../utils/XmlElementGeneratorTools.java | 25 ++++++++ .../plugins/OptimisticLockerPluginTest.java | 61 ++++++++++++++++++- ...icalDeletePlugin-customizedNextVersion.xml | 2 +- 5 files changed, 90 insertions(+), 61 deletions(-) diff --git a/src/main/java/com/itfsw/mybatis/generator/plugins/LogicalDeletePlugin.java b/src/main/java/com/itfsw/mybatis/generator/plugins/LogicalDeletePlugin.java index c295032..d7ef0c0 100644 --- a/src/main/java/com/itfsw/mybatis/generator/plugins/LogicalDeletePlugin.java +++ b/src/main/java/com/itfsw/mybatis/generator/plugins/LogicalDeletePlugin.java @@ -100,14 +100,12 @@ public class LogicalDeletePlugin extends BasePlugin { || JDBCType.BIT == type || JDBCType.BOOLEAN == type || JDBCType.CHAR == type - || JDBCType.DECIMAL == type || JDBCType.DOUBLE == type || JDBCType.FLOAT == type || JDBCType.INTEGER == type || JDBCType.LONGNVARCHAR == type || JDBCType.LONGVARCHAR == type || JDBCType.NCHAR == type - || JDBCType.NUMERIC == type || JDBCType.NVARCHAR == type || JDBCType.SMALLINT == type || JDBCType.TINYINT == type @@ -271,24 +269,7 @@ public class LogicalDeletePlugin extends BasePlugin { // 更新逻辑删除字段 sb.append(this.logicalDeleteColumn.getActualColumnName()); sb.append(" = "); - - // 判断字段类型 - JDBCType type = JDBCType.valueOf(this.logicalDeleteColumn.getJdbcType()); - if (this.logicalDeleteValue == null || "NULL".equalsIgnoreCase(this.logicalDeleteValue)) { - sb.append("NULL"); - } else if (JDBCType.CHAR == type - || JDBCType.LONGNVARCHAR == type - || JDBCType.LONGVARCHAR == type - || JDBCType.NCHAR == type - || JDBCType.NVARCHAR == type - || JDBCType.VARCHAR == type - || JDBCType.BIGINT == type) { - sb.append("'"); - sb.append(this.logicalDeleteValue); - sb.append("'"); - } else { - sb.append(this.logicalDeleteValue); - } + sb.append(XmlElementGeneratorTools.generateLogicalDeleteColumnValue(this.logicalDeleteColumn, this.logicalDeleteValue)); logicalDeleteByExample.addElement(new TextElement(sb.toString())); @@ -325,24 +306,7 @@ public class LogicalDeletePlugin extends BasePlugin { // 更新逻辑删除字段 sb1.append(this.logicalDeleteColumn.getActualColumnName()); sb1.append(" = "); - - // 判断字段类型 - JDBCType type1 = JDBCType.valueOf(this.logicalDeleteColumn.getJdbcType()); - if (this.logicalDeleteValue == null || "NULL".equalsIgnoreCase(this.logicalDeleteValue)) { - sb1.append("NULL"); - } else if (JDBCType.CHAR == type1 - || JDBCType.LONGNVARCHAR == type1 - || JDBCType.LONGVARCHAR == type1 - || JDBCType.NCHAR == type1 - || JDBCType.NVARCHAR == type1 - || JDBCType.VARCHAR == type1 - || JDBCType.BIGINT == type1) { - sb1.append("'"); - sb1.append(this.logicalDeleteValue); - sb1.append("'"); - } else { - sb1.append(this.logicalDeleteValue); - } + sb1.append(XmlElementGeneratorTools.generateLogicalDeleteColumnValue(this.logicalDeleteColumn, this.logicalDeleteValue)); logicalDeleteByPrimaryKey.addElement(new TextElement(sb1.toString())); @@ -401,10 +365,10 @@ public class LogicalDeletePlugin extends BasePlugin { XmlElement chooseEle = new XmlElement("choose"); XmlElement whenEle = new XmlElement("when"); whenEle.addAttribute(new Attribute("test", PARAMETER_LOGICAL_DELETED)); - whenEle.addElement(new TextElement("'" + this.logicalDeleteValue + "'")); + whenEle.addElement(new TextElement(XmlElementGeneratorTools.generateLogicalDeleteColumnValue(this.logicalDeleteColumn, this.logicalDeleteValue))); chooseEle.addElement(whenEle); XmlElement otherwiseEle = new XmlElement("otherwise"); - otherwiseEle.addElement(new TextElement("'" + this.logicalUnDeleteValue + "'")); + otherwiseEle.addElement(new TextElement(XmlElementGeneratorTools.generateLogicalDeleteColumnValue(this.logicalDeleteColumn, this.logicalUnDeleteValue))); chooseEle.addElement(otherwiseEle); selectByPrimaryKey.addElement(chooseEle); diff --git a/src/main/java/com/itfsw/mybatis/generator/plugins/OptimisticLockerPlugin.java b/src/main/java/com/itfsw/mybatis/generator/plugins/OptimisticLockerPlugin.java index 53c749f..c973986 100644 --- a/src/main/java/com/itfsw/mybatis/generator/plugins/OptimisticLockerPlugin.java +++ b/src/main/java/com/itfsw/mybatis/generator/plugins/OptimisticLockerPlugin.java @@ -29,7 +29,6 @@ import org.mybatis.generator.codegen.mybatis3.MyBatis3FormattingUtilities; import org.mybatis.generator.internal.util.JavaBeansUtil; import org.mybatis.generator.internal.util.StringUtility; -import java.sql.JDBCType; import java.util.*; /** @@ -822,23 +821,7 @@ public class OptimisticLockerPlugin extends BasePlugin implements IModelBuilderP // 逻辑删除 set sb.append(logicalDeleteColumn.getActualColumnName()); sb.append(" = "); - // 判断字段类型 - JDBCType type = JDBCType.valueOf(logicalDeleteColumn.getJdbcType()); - if (logicalDeleteValue == null || "NULL".equalsIgnoreCase(logicalDeleteValue)) { - sb.append("NULL"); - } else if (JDBCType.CHAR == type - || JDBCType.LONGNVARCHAR == type - || JDBCType.LONGVARCHAR == type - || JDBCType.NCHAR == type - || JDBCType.NVARCHAR == type - || JDBCType.VARCHAR == type - || JDBCType.BIGINT == type) { - sb.append("'"); - sb.append(logicalDeleteValue); - sb.append("'"); - } else { - sb.append(logicalDeleteValue); - } + sb.append(XmlElementGeneratorTools.generateLogicalDeleteColumnValue(logicalDeleteColumn, logicalDeleteValue)); updateEle.addElement(new TextElement(sb.toString())); // 更新条件 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 81a979c..4fe048b 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 @@ -557,4 +557,29 @@ public class XmlElementGeneratorTools { } return resultElement; } + + /** + * 生成逻辑删除列的删除值 + * @param logicalDeleteColumn + * @param value + * @return + */ + public static String generateLogicalDeleteColumnValue(IntrospectedColumn logicalDeleteColumn, String value) { + StringBuilder sb = new StringBuilder(); + // 判断字段类型 + if (value == null || "NULL".equalsIgnoreCase(value)) { + sb.append("NULL"); + } else if (logicalDeleteColumn.isStringColumn()) { + sb.append("'"); + sb.append(value); + sb.append("'"); + } else if (logicalDeleteColumn.getFullyQualifiedJavaType().getFullyQualifiedName().equals(Long.class.getName())){ + sb.append(value.replaceAll("L|l", "")); + } else if (logicalDeleteColumn.getFullyQualifiedJavaType().getFullyQualifiedName().equals(Float.class.getName())){ + sb.append(value.replaceAll("F|f", "")); + } else { + sb.append(value); + } + return sb.toString(); + } } diff --git a/src/test/java/com/itfsw/mybatis/generator/plugins/OptimisticLockerPluginTest.java b/src/test/java/com/itfsw/mybatis/generator/plugins/OptimisticLockerPluginTest.java index a23ca4f..f8d36b6 100644 --- a/src/test/java/com/itfsw/mybatis/generator/plugins/OptimisticLockerPluginTest.java +++ b/src/test/java/com/itfsw/mybatis/generator/plugins/OptimisticLockerPluginTest.java @@ -344,6 +344,7 @@ public class OptimisticLockerPluginTest { tool.generate(() -> DBHelper.resetDB("scripts/OptimisticLockerPlugin/init.sql"), new AbstractShellCallback() { @Override public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception { + // ---------------------------------------- logicalDeleteWithVersionByExample --------------------------------------- ObjectUtil tbMapper = new ObjectUtil(sqlSession.getMapper(loader.loadClass(packagz + ".TbMapper"))); ObjectUtil tbExample = new ObjectUtil(loader, packagz + ".TbExample"); @@ -352,7 +353,7 @@ public class OptimisticLockerPluginTest { // 验证sql String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), OptimisticLockerPlugin.METHOD_LOGICAL_DELETE_WITH_VERSION_BY_EXAMPLE, 0L, tbExample.getObject()); - Assert.assertEquals(sql, "update tb set inc_f1 = inc_f1 + 1,inc_f2 = '9L' WHERE inc_f1 = 0 and ( ( id = '1' ) )"); + Assert.assertEquals(sql, "update tb set inc_f1 = inc_f1 + 1,inc_f2 = 9 WHERE inc_f1 = 0 and ( ( id = '1' ) )"); // 验证执行 Object result = tbMapper.invoke(OptimisticLockerPlugin.METHOD_LOGICAL_DELETE_WITH_VERSION_BY_EXAMPLE, 0L, tbExample.getObject()); Assert.assertEquals(result, 1); @@ -360,15 +361,71 @@ public class OptimisticLockerPluginTest { rs.first(); Assert.assertEquals(rs.getInt("inc_f1"), 1); Assert.assertEquals(rs.getInt("inc_f2"), 9); + + // ---------------------------------------- logicalDeleteWithVersionByPrimaryKey --------------------------------------- + // 验证sql + sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), OptimisticLockerPlugin.METHOD_LOGICAL_DELETE_WITH_VERSION_BY_PRIMARY_KEY, 1L, 2L); + Assert.assertEquals(sql, "update tb set inc_f1 = inc_f1 + 1,inc_f2 = 9 where inc_f1 = 1 and id = 2"); + // 验证执行 + result = tbMapper.invoke(OptimisticLockerPlugin.METHOD_LOGICAL_DELETE_WITH_VERSION_BY_PRIMARY_KEY, 1L, 2L); + Assert.assertEquals(result, 1); + rs = DBHelper.execute(sqlSession.getConnection(), "select * from tb where id = 2"); + rs.first(); + Assert.assertEquals(rs.getInt("inc_f1"), 2); + Assert.assertEquals(rs.getInt("inc_f2"), 9); } }); + // 自定义nextVersion tool = MyBatisGeneratorTool.create("scripts/OptimisticLockerPlugin/mybatis-generator-with-LogicalDeletePlugin-customizedNextVersion.xml"); - tool.generate(() -> DBHelper.resetDB("scripts/OptimisticLockerPlugin/init.sql"), new AbstractShellCallback() { @Override public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception { + // ---------------------------------------- logicalDeleteWithVersionByExample --------------------------------------- + ObjectUtil tbMapper = new ObjectUtil(sqlSession.getMapper(loader.loadClass(packagz + ".TbMapper"))); + ObjectUtil tbExample = new ObjectUtil(loader, packagz + ".TbExample"); + ObjectUtil criteria = new ObjectUtil(tbExample.invoke("createCriteria")); + criteria.invoke("andIdEqualTo", 1L); + + // 验证sql + String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), OptimisticLockerPlugin.METHOD_LOGICAL_DELETE_WITH_VERSION_BY_EXAMPLE, 0L, 100L, tbExample.getObject()); + Assert.assertEquals(sql, "update tb set inc_f1 = 100,inc_f2 = 9 WHERE inc_f1 = 0 and ( ( id = '1' ) )"); + // 验证执行 + Object result = tbMapper.invoke(OptimisticLockerPlugin.METHOD_LOGICAL_DELETE_WITH_VERSION_BY_EXAMPLE, 0L, 100L, tbExample.getObject()); + Assert.assertEquals(result, 1); + ResultSet rs = DBHelper.execute(sqlSession.getConnection(), "select * from tb where id = 1"); + rs.first(); + Assert.assertEquals(rs.getInt("inc_f1"), 100); + Assert.assertEquals(rs.getInt("inc_f2"), 9); + + // ---------------------------------------- logicalDeleteWithVersionByPrimaryKey --------------------------------------- + // 验证sql + sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), OptimisticLockerPlugin.METHOD_LOGICAL_DELETE_WITH_VERSION_BY_PRIMARY_KEY, 1L, 200L, 2L); + Assert.assertEquals(sql, "update tb set inc_f1 = 200,inc_f2 = 9 where inc_f1 = 1 and id = 2"); + // 验证执行 + result = tbMapper.invoke(OptimisticLockerPlugin.METHOD_LOGICAL_DELETE_WITH_VERSION_BY_PRIMARY_KEY, 1L, 200L, 2L); + Assert.assertEquals(result, 1); + rs = DBHelper.execute(sqlSession.getConnection(), "select * from tb where id = 2"); + rs.first(); + Assert.assertEquals(rs.getInt("inc_f1"), 200); + Assert.assertEquals(rs.getInt("inc_f2"), 9); + + // ------------------------------------ Key ----------------------------------- + ObjectUtil tbKeysMapper = new ObjectUtil(sqlSession.getMapper(loader.loadClass(packagz + ".TbKeysMapper"))); + ObjectUtil tbKeysKey = new ObjectUtil(loader, packagz + ".TbKeysKey"); + tbKeysKey.set("key1", 2L); + tbKeysKey.set("key2", "k2"); + + sql = SqlHelper.getFormatMapperSql(tbKeysMapper.getObject(), OptimisticLockerPlugin.METHOD_LOGICAL_DELETE_WITH_VERSION_BY_PRIMARY_KEY, 3L, 200L, tbKeysKey.getObject()); + Assert.assertEquals(sql, "update tb_keys set inc_f1 = 200,inc_f2 = 9 where inc_f1 = 3 and key1 = 2 and key2 = 'k2'"); + // 验证执行 + result = tbKeysMapper.invoke(OptimisticLockerPlugin.METHOD_LOGICAL_DELETE_WITH_VERSION_BY_PRIMARY_KEY, 3L, 200L, tbKeysKey.getObject()); + Assert.assertEquals(result, 1); + rs = DBHelper.execute(sqlSession.getConnection(), "select * from tb_keys where key1 = 2 and key2 = 'k2'"); + rs.first(); + Assert.assertEquals(rs.getInt("inc_f1"), 200); + Assert.assertEquals(rs.getInt("inc_f2"), 9); } }); } diff --git a/src/test/resources/scripts/OptimisticLockerPlugin/mybatis-generator-with-LogicalDeletePlugin-customizedNextVersion.xml b/src/test/resources/scripts/OptimisticLockerPlugin/mybatis-generator-with-LogicalDeletePlugin-customizedNextVersion.xml index c2d3606..bff37af 100644 --- a/src/test/resources/scripts/OptimisticLockerPlugin/mybatis-generator-with-LogicalDeletePlugin-customizedNextVersion.xml +++ b/src/test/resources/scripts/OptimisticLockerPlugin/mybatis-generator-with-LogicalDeletePlugin-customizedNextVersion.xml @@ -64,7 +64,7 @@ - +