diff --git a/src/test/java/com/itfsw/mybatis/generator/plugins/SelectSelectivePluginTest.java b/src/test/java/com/itfsw/mybatis/generator/plugins/SelectSelectivePluginTest.java index 1feb2ea..1de7e8f 100644 --- a/src/test/java/com/itfsw/mybatis/generator/plugins/SelectSelectivePluginTest.java +++ b/src/test/java/com/itfsw/mybatis/generator/plugins/SelectSelectivePluginTest.java @@ -43,13 +43,14 @@ public class SelectSelectivePluginTest { } /** - * 测试生成的方法 + * 测试selectByExampleSelective * @throws Exception */ @Test public void testSelectByExampleSelective() throws Exception { + // 一些基础测试 MyBatisGeneratorTool tool = MyBatisGeneratorTool.create("scripts/SelectSelectivePlugin/mybatis-generator.xml"); - tool.generate(new AbstractShellCallback() { + tool.generate(() -> DBHelper.createDB("scripts/SelectSelectivePlugin/init.sql"), new AbstractShellCallback() { @Override public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception { // 1. 测试sql @@ -109,6 +110,95 @@ public class SelectSelectivePluginTest { Assert.assertEquals(list1.size(), 3); } }); + // 测试Selective不传 + tool.generate(() -> DBHelper.createDB("scripts/SelectSelectivePlugin/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("andIdLessThan", 100l); + + // sql + String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "selectByExampleSelective", tbExample.getObject()); + Assert.assertEquals(sql, "select id, field1, field2 from tb WHERE ( id < '100' )"); + + // 测试执行 + List list = (List) tbMapper.invoke("selectByExampleSelective", tbExample.getObject(), null); + // 取第四条数据出来比较 + ObjectUtil result = new ObjectUtil(list.get(3)); + Assert.assertEquals(result.get("id"), 4L); + Assert.assertEquals(result.get("field1"), "fd3"); + Assert.assertEquals(result.get("field2"), 4); + } + }); + // 测试WithBLOBs的情况 + tool.generate(() -> DBHelper.createDB("scripts/SelectSelectivePlugin/init.sql"), new AbstractShellCallback() { + @Override + public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception { + ObjectUtil tbBlobsMapper = new ObjectUtil(sqlSession.getMapper(loader.loadClass(packagz + ".TbBlobsMapper"))); + + ObjectUtil tbBlobsExample = new ObjectUtil(loader, packagz + ".TbBlobsExample"); + ObjectUtil criteria = new ObjectUtil(tbBlobsExample.invoke("createCriteria")); + criteria.invoke("andIdLessThan", 100l); + + // selective + // 从base model 和 WithBLOBs都各取一个,更有代表性 + ObjectUtil columnId = new ObjectUtil(loader, packagz + ".TbBlobsWithBLOBs$Column#id"); + ObjectUtil columnField2 = new ObjectUtil(loader, packagz + ".TbBlobsWithBLOBs$Column#field2"); + + Object columns = Array.newInstance(columnId.getCls(), 2); + Array.set(columns, 0, columnId.getObject()); + Array.set(columns, 1, columnField2.getObject()); + + // sql + String sql = SqlHelper.getFormatMapperSql(tbBlobsMapper.getObject(), "selectByExampleSelective", tbBlobsExample.getObject(), columns); + Assert.assertEquals(sql, "select id , field2 from tb_blobs WHERE ( id < '100' )"); + + // 测试执行 + List list = (List) tbBlobsMapper.invoke("selectByExampleSelective", tbBlobsExample.getObject(), columns); + // 取第四条数据出来比较(这条数据所有字段是全的) + ObjectUtil result = new ObjectUtil(list.get(3)); + Assert.assertEquals(result.get("id"), 4L); + Assert.assertNull(result.get("field1")); + Assert.assertEquals(result.get("field2"), "L4"); + Assert.assertNull(result.get("field3")); + } + }); + // 测试Key的情况 + tool.generate(() -> DBHelper.createDB("scripts/SelectSelectivePlugin/init.sql"), new AbstractShellCallback() { + @Override + public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception { + ObjectUtil tbKeysMapper = new ObjectUtil(sqlSession.getMapper(loader.loadClass(packagz + ".TbKeysMapper"))); + + ObjectUtil tbKeysExample = new ObjectUtil(loader, packagz + ".TbKeysExample"); + ObjectUtil criteria = new ObjectUtil(tbKeysExample.invoke("createCriteria")); + criteria.invoke("andKey1LessThan", 100l); + + // selective + // 从base model 和 key model都各取一个,更有代表性 + ObjectUtil columnKey1 = new ObjectUtil(loader, packagz + ".TbKeys$Column#key1"); + ObjectUtil columnField1 = new ObjectUtil(loader, packagz + ".TbKeys$Column#field1"); + + Object columns = Array.newInstance(columnKey1.getCls(), 2); + Array.set(columns, 0, columnKey1.getObject()); + Array.set(columns, 1, columnField1.getObject()); + + // sql + String sql = SqlHelper.getFormatMapperSql(tbKeysMapper.getObject(), "selectByExampleSelective", tbKeysExample.getObject(), columns); + Assert.assertEquals(sql, "select key1 , field1 from tb_keys WHERE ( key1 < '100' )"); + + // 测试执行 + List list = (List) tbKeysMapper.invoke("selectByExampleSelective", tbKeysExample.getObject(), columns); + // 取第三条数据出来比较(这条数据所有字段是全的) + ObjectUtil result = new ObjectUtil(list.get(2)); + Assert.assertEquals(result.get("key1"), 3L); + Assert.assertNull(result.get("key2")); + Assert.assertEquals(result.get("field1"), "fd2"); + Assert.assertNull(result.get("field2")); + } + }); } /** @@ -118,7 +208,8 @@ public class SelectSelectivePluginTest { @Test public void testSelectByPrimaryKeySelective() throws Exception { MyBatisGeneratorTool tool = MyBatisGeneratorTool.create("scripts/SelectSelectivePlugin/mybatis-generator.xml"); - tool.generate(new AbstractShellCallback() { + // 一些基础测试 + tool.generate(() -> DBHelper.createDB("scripts/SelectSelectivePlugin/init.sql"), new AbstractShellCallback() { @Override public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception { // 1. 测试sql @@ -151,6 +242,84 @@ public class SelectSelectivePluginTest { Assert.assertEquals(new ObjectUtil(tbKeys).get("field1"), "fd1"); } }); + // 测试Selective不传 + tool.generate(() -> DBHelper.createDB("scripts/SelectSelectivePlugin/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"))); + + // sql + String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "selectByPrimaryKeySelective", 4L); + Assert.assertEquals(sql, "select id, field1, field2 from tb where id = 4"); + + // 测试执行 + ObjectUtil result = new ObjectUtil(tbMapper.invoke("selectByPrimaryKeySelective", 4L, null)); + // 取数据出来比较 + Assert.assertEquals(result.get("id"), 4L); + Assert.assertEquals(result.get("field1"), "fd3"); + Assert.assertEquals(result.get("field2"), 4); + } + }); + // 测试WithBLOBs的情况 + tool.generate(() -> DBHelper.createDB("scripts/SelectSelectivePlugin/init.sql"), new AbstractShellCallback() { + @Override + public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception { + ObjectUtil tbBlobsMapper = new ObjectUtil(sqlSession.getMapper(loader.loadClass(packagz + ".TbBlobsMapper"))); + + // selective + // 从base model 和 WithBLOBs都各取一个,更有代表性 + ObjectUtil columnId = new ObjectUtil(loader, packagz + ".TbBlobsWithBLOBs$Column#id"); + ObjectUtil columnField2 = new ObjectUtil(loader, packagz + ".TbBlobsWithBLOBs$Column#field2"); + + Object columns = Array.newInstance(columnId.getCls(), 2); + Array.set(columns, 0, columnId.getObject()); + Array.set(columns, 1, columnField2.getObject()); + + // sql + String sql = SqlHelper.getFormatMapperSql(tbBlobsMapper.getObject(), "selectByPrimaryKeySelective", 4L, columns); + Assert.assertEquals(sql, "select id , field2 from tb_blobs where id = 4"); + + // 测试执行 + ObjectUtil result = new ObjectUtil(tbBlobsMapper.invoke("selectByPrimaryKeySelective", 4L, columns)); + // 取第数据出来比较(这条数据所有字段是全的) + Assert.assertEquals(result.get("id"), 4L); + Assert.assertNull(result.get("field1")); + Assert.assertEquals(result.get("field2"), "L4"); + Assert.assertNull(result.get("field3")); + } + }); + // 测试Key的情况 + tool.generate(() -> DBHelper.createDB("scripts/SelectSelectivePlugin/init.sql"), new AbstractShellCallback() { + @Override + public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception { + ObjectUtil tbKeysMapper = new ObjectUtil(sqlSession.getMapper(loader.loadClass(packagz + ".TbKeysMapper"))); + + // selective + // 从base model 和 key model都各取一个,更有代表性 + ObjectUtil columnKey1 = new ObjectUtil(loader, packagz + ".TbKeys$Column#key1"); + ObjectUtil columnField1 = new ObjectUtil(loader, packagz + ".TbKeys$Column#field1"); + + Object columns = Array.newInstance(columnKey1.getCls(), 2); + Array.set(columns, 0, columnKey1.getObject()); + Array.set(columns, 1, columnField1.getObject()); + + ObjectUtil tbKeysKey = new ObjectUtil(loader, packagz + ".TbKeysKey"); + tbKeysKey.set("key1", 3L); + tbKeysKey.set("key2", "4"); + + // sql + String sql = SqlHelper.getFormatMapperSql(tbKeysMapper.getObject(), "selectByPrimaryKeySelective", tbKeysKey.getObject(), columns); + Assert.assertEquals(sql, "select key1 , field1 from tb_keys where key1 = 3 and key2 = '4'"); + + // 测试执行 + ObjectUtil result = new ObjectUtil(tbKeysMapper.invoke("selectByPrimaryKeySelective", tbKeysKey.getObject(), columns)); + // 取第三条数据出来比较(这条数据所有字段是全的) + Assert.assertEquals(result.get("key1"), 3L); + Assert.assertNull(result.get("key2")); + Assert.assertEquals(result.get("field1"), "fd2"); + Assert.assertNull(result.get("field2")); + } + }); } /** @@ -197,6 +366,94 @@ public class SelectSelectivePluginTest { Assert.assertNull(tb.get("field2")); } }); + + // 测试Selective不传 + tool.generate(() -> DBHelper.createDB("scripts/SelectSelectivePlugin/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", 4L); + + // sql + String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "selectOneByExampleSelective", tbExample.getObject()); + Assert.assertEquals(sql, "select id, field1, field2 from tb WHERE ( id = '4' ) limit 1"); + + // 测试执行 + ObjectUtil result = new ObjectUtil( tbMapper.invoke("selectOneByExampleSelective", tbExample.getObject(), null)); + // 取第四条数据出来比较 + Assert.assertEquals(result.get("id"), 4L); + Assert.assertEquals(result.get("field1"), "fd3"); + Assert.assertEquals(result.get("field2"), 4); + } + }); + // 测试WithBLOBs的情况 + tool.generate(() -> DBHelper.createDB("scripts/SelectSelectivePlugin/init.sql"), new AbstractShellCallback() { + @Override + public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception { + ObjectUtil tbBlobsMapper = new ObjectUtil(sqlSession.getMapper(loader.loadClass(packagz + ".TbBlobsMapper"))); + + ObjectUtil tbBlobsExample = new ObjectUtil(loader, packagz + ".TbBlobsExample"); + ObjectUtil criteria = new ObjectUtil(tbBlobsExample.invoke("createCriteria")); + criteria.invoke("andIdEqualTo", 4L); + + // selective + // 从base model 和 WithBLOBs都各取一个,更有代表性 + ObjectUtil columnId = new ObjectUtil(loader, packagz + ".TbBlobsWithBLOBs$Column#id"); + ObjectUtil columnField2 = new ObjectUtil(loader, packagz + ".TbBlobsWithBLOBs$Column#field2"); + + Object columns = Array.newInstance(columnId.getCls(), 2); + Array.set(columns, 0, columnId.getObject()); + Array.set(columns, 1, columnField2.getObject()); + + // sql + String sql = SqlHelper.getFormatMapperSql(tbBlobsMapper.getObject(), "selectOneByExampleSelective", tbBlobsExample.getObject(), columns); + Assert.assertEquals(sql, "select id , field2 from tb_blobs WHERE ( id = '4' ) limit 1"); + + // 测试执行 + ObjectUtil result = new ObjectUtil( tbBlobsMapper.invoke("selectOneByExampleSelective", tbBlobsExample.getObject(), columns)); + // 取数据出来比较(这条数据所有字段是全的) + Assert.assertEquals(result.get("id"), 4L); + Assert.assertNull(result.get("field1")); + Assert.assertEquals(result.get("field2"), "L4"); + Assert.assertNull(result.get("field3")); + } + }); + // 测试Key的情况 + tool.generate(() -> DBHelper.createDB("scripts/SelectSelectivePlugin/init.sql"), new AbstractShellCallback() { + @Override + public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception { + ObjectUtil tbKeysMapper = new ObjectUtil(sqlSession.getMapper(loader.loadClass(packagz + ".TbKeysMapper"))); + + ObjectUtil tbKeysExample = new ObjectUtil(loader, packagz + ".TbKeysExample"); + ObjectUtil criteria = new ObjectUtil(tbKeysExample.invoke("createCriteria")); + criteria.invoke("andKey1EqualTo", 3L); + criteria.invoke("andKey2EqualTo", "4"); + + // selective + // 从base model 和 key model都各取一个,更有代表性 + ObjectUtil columnKey1 = new ObjectUtil(loader, packagz + ".TbKeys$Column#key1"); + ObjectUtil columnField1 = new ObjectUtil(loader, packagz + ".TbKeys$Column#field1"); + + Object columns = Array.newInstance(columnKey1.getCls(), 2); + Array.set(columns, 0, columnKey1.getObject()); + Array.set(columns, 1, columnField1.getObject()); + + // sql + String sql = SqlHelper.getFormatMapperSql(tbKeysMapper.getObject(), "selectOneByExampleSelective", tbKeysExample.getObject(), columns); + Assert.assertEquals(sql, "select key1 , field1 from tb_keys WHERE ( key1 = '3' and key2 = '4' ) limit 1"); + + // 测试执行 + ObjectUtil result = new ObjectUtil(tbKeysMapper.invoke("selectOneByExampleSelective", tbKeysExample.getObject(), columns)); + // 取第三条数据出来比较(这条数据所有字段是全的) + Assert.assertEquals(result.get("key1"), 3L); + Assert.assertNull(result.get("key2")); + Assert.assertEquals(result.get("field1"), "fd2"); + Assert.assertNull(result.get("field2")); + } + }); } /** diff --git a/src/test/resources/scripts/SelectSelectivePlugin/init.sql b/src/test/resources/scripts/SelectSelectivePlugin/init.sql index b83921c..4fba2e9 100644 --- a/src/test/resources/scripts/SelectSelectivePlugin/init.sql +++ b/src/test/resources/scripts/SelectSelectivePlugin/init.sql @@ -49,6 +49,10 @@ CREATE TABLE `tb_blobs` ( -- ---------------------------- -- Records of tb_blobs -- ---------------------------- +INSERT INTO `tb_blobs` VALUES ('1', 'fd1', 'L1', null); +INSERT INTO `tb_blobs` VALUES ('2', null, 'L2', 'LL2'); +INSERT INTO `tb_blobs` VALUES ('3', 'fd3', 'L3', 'LL3'); +INSERT INTO `tb_blobs` VALUES ('4', 'fd3', 'L4', 'LL4'); -- ---------------------------- -- Table structure for tb_keys diff --git a/src/test/resources/scripts/SelectSelectivePlugin/mybatis-generator-with-constructorBased-false.xml b/src/test/resources/scripts/SelectSelectivePlugin/mybatis-generator-with-constructorBased-false.xml index f8d04ff..bcafeea 100644 --- a/src/test/resources/scripts/SelectSelectivePlugin/mybatis-generator-with-constructorBased-false.xml +++ b/src/test/resources/scripts/SelectSelectivePlugin/mybatis-generator-with-constructorBased-false.xml @@ -54,5 +54,12 @@ + +
+ +
+ + +
\ No newline at end of file