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 13a30fb..65e46dd 100644 --- a/src/test/java/com/itfsw/mybatis/generator/plugins/OptimisticLockerPluginTest.java +++ b/src/test/java/com/itfsw/mybatis/generator/plugins/OptimisticLockerPluginTest.java @@ -871,4 +871,110 @@ public class OptimisticLockerPluginTest { } }); } + + /** + * 测试整合SelectiveEnhancedPlugin插件和IncrementsPlugin插件 + */ + @Test + public void testWithSelectiveEnhancedPluginAndIncrementsPlugin() throws Exception { + MyBatisGeneratorTool tool = MyBatisGeneratorTool.create("scripts/OptimisticLockerPlugin/mybatis-generator-with-SelectiveEnhancedPlugin-IncrementsPlugin.xml"); + + // 测试updateWithVersionByExampleSelective + tool.generate(() -> DBHelper.createDB("scripts/OptimisticLockerPlugin/init.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 tbExample = new ObjectUtil(loader, packagz + ".TbExample"); + ObjectUtil criteria = new ObjectUtil(tbExample.invoke("createCriteria")); + criteria.invoke("andIdEqualTo", 1l); + + ObjectUtil tbBuilder = new ObjectUtil(loader, packagz + ".Tb$Builder"); + ObjectUtil tbBuilderInc = new ObjectUtil(loader, packagz + ".Tb$Builder$Inc#INC"); + tbBuilder.invoke("id", 1L); + tbBuilder.invoke("incF1", 121l, tbBuilderInc.getObject()); // 这个不会在sql才为正常 + tbBuilder.invoke("incF2", 5l, tbBuilderInc.getObject()); + tbBuilder.invoke("incF3", 10l); + + // selective + ObjectUtil TbColumnId = new ObjectUtil(loader, packagz + ".Tb$Column#id"); + ObjectUtil TbColumnField1 = new ObjectUtil(loader, packagz + ".Tb$Column#field1"); + ObjectUtil TbColumnIncF1 = new ObjectUtil(loader, packagz + ".Tb$Column#incF1"); // 这个不会在sql才为正常 + ObjectUtil TbColumnIncF2 = new ObjectUtil(loader, packagz + ".Tb$Column#incF2"); + Object columns = Array.newInstance(TbColumnField1.getCls(), 4); + Array.set(columns, 0, TbColumnId.getObject()); + Array.set(columns, 1, TbColumnField1.getObject()); + Array.set(columns, 2, TbColumnIncF1.getObject()); + Array.set(columns, 3, TbColumnIncF2.getObject()); + + // sql(普通非空判断) + String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "updateWithVersionByExampleSelective", 100L, tbBuilder.invoke("build"), tbExample.getObject()); + Assert.assertEquals(sql, "update tb SET inc_f1 = inc_f1 + 1, id = 1, inc_f2 = inc_f2 + 5 , inc_f3 = 10 WHERE inc_f1 = 100 and ( ( id = '1' ) )"); + // sql(selective增强) + sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "updateWithVersionByExampleSelective", 100L, tbBuilder.invoke("build"), tbExample.getObject(), columns); + Assert.assertEquals(sql, "update tb SET inc_f1 = inc_f1 + 1, id = 1 , field1 = 'null' , inc_f2 = inc_f2 + 5 WHERE inc_f1 = 100 and ( ( id = '1' ) )"); + + // 执行一次,因为版本号100不存在所以应该返回0(普通非空判断) + Object result = tbMapper.invoke("updateWithVersionByExampleSelective", 100L, tbBuilder.invoke("build"), tbExample.getObject(), null); + Assert.assertEquals(result, 0); + + // id = 1 的版本号应该是0(selective 增强) + result = tbMapper.invoke("updateWithVersionByExampleSelective", 0L, tbBuilder.invoke("build"), tbExample.getObject(), columns); + Assert.assertEquals(result, 1); + + // 执行完成后版本号应该加1 + ResultSet rs = DBHelper.execute(sqlSession.getConnection(), "select * from tb where id = 1"); + rs.first(); + Assert.assertEquals(rs.getInt("inc_f1"), 1); + Assert.assertEquals(rs.getInt("inc_f2"), 7); + } + }); + + // 测试updateWithVersionByPrimaryKeySelective + tool.generate(() -> DBHelper.createDB("scripts/OptimisticLockerPlugin/init.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 tbBuilder = new ObjectUtil(loader, packagz + ".Tb$Builder"); + ObjectUtil tbBuilderInc = new ObjectUtil(loader, packagz + ".Tb$Builder$Inc#INC"); + tbBuilder.invoke("id", 1L); + tbBuilder.invoke("incF1", 121l, tbBuilderInc.getObject()); // 这个不会在sql才为正常 + tbBuilder.invoke("incF2", 5l, tbBuilderInc.getObject()); + tbBuilder.invoke("incF3", 10l); + + // selective + ObjectUtil TbColumnId = new ObjectUtil(loader, packagz + ".Tb$Column#id"); + ObjectUtil TbColumnField1 = new ObjectUtil(loader, packagz + ".Tb$Column#field1"); + ObjectUtil TbColumnIncF1 = new ObjectUtil(loader, packagz + ".Tb$Column#incF1"); // 这个不会在sql才为正常 + ObjectUtil TbColumnIncF2 = new ObjectUtil(loader, packagz + ".Tb$Column#incF2"); + Object columns = Array.newInstance(TbColumnField1.getCls(), 4); + Array.set(columns, 0, TbColumnId.getObject()); + Array.set(columns, 1, TbColumnField1.getObject()); + Array.set(columns, 2, TbColumnIncF1.getObject()); + Array.set(columns, 3, TbColumnIncF2.getObject()); + + // sql(普通非空判断) + String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "updateWithVersionByPrimaryKeySelective", 100L, tbBuilder.invoke("build")); + Assert.assertEquals(sql, "update tb SET inc_f1 = inc_f1 + 1, inc_f2 = inc_f2 + 5 , inc_f3 = 10 where inc_f1 = 100 and id = 1"); + // sql(selective增强) + sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "updateWithVersionByPrimaryKeySelective", 100L, tbBuilder.invoke("build"), columns); + Assert.assertEquals(sql, "update tb SET inc_f1 = inc_f1 + 1, id = 1 , field1 = 'null' , inc_f2 = inc_f2 + 5 where inc_f1 = 100 and id = 1"); + + // 执行一次,因为版本号100不存在所以应该返回0(普通非空判断) + Object result = tbMapper.invoke("updateWithVersionByPrimaryKeySelective", 100L, tbBuilder.invoke("build"), null); + Assert.assertEquals(result, 0); + + // id = 1 的版本号应该是0(selective 增强) + result = tbMapper.invoke("updateWithVersionByPrimaryKeySelective", 0L, tbBuilder.invoke("build"), columns); + Assert.assertEquals(result, 1); + + // 执行完成后版本号应该加1 + ResultSet rs = DBHelper.execute(sqlSession.getConnection(), "select * from tb where id = 1"); + rs.first(); + Assert.assertEquals(rs.getInt("inc_f1"), 1); + Assert.assertEquals(rs.getInt("inc_f2"), 7); + } + }); + } } \ No newline at end of file diff --git a/src/test/resources/scripts/OptimisticLockerPlugin/mybatis-generator-with-SelectiveEnhancedPlugin-IncrementsPlugin.xml b/src/test/resources/scripts/OptimisticLockerPlugin/mybatis-generator-with-SelectiveEnhancedPlugin-IncrementsPlugin.xml new file mode 100644 index 0000000..8ede9ed --- /dev/null +++ b/src/test/resources/scripts/OptimisticLockerPlugin/mybatis-generator-with-SelectiveEnhancedPlugin-IncrementsPlugin.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+
\ No newline at end of file