From b429ea6475913b19b25886211f57dead12b3a19c Mon Sep 17 00:00:00 2001 From: mofan Date: Tue, 5 Dec 2023 23:21:08 +0800 Subject: [PATCH] test: modify failed unit test --- .../test/relation/onetoone/Account.java | 3 +- .../test/relation/onetoone/AccountDTO.java | 3 +- .../test/relation/onetoone/Role.java | 2 + .../com/mybatisflex/test/Account6Test.java | 8 +- .../com/mybatisflex/test/Account7Test.java | 8 +- .../test/AccountInsertWithArrayAttrTest.java | 10 +- .../mybatisflex/test/AccountNativeTest.java | 24 ++- .../com/mybatisflex/test/DbChainTest.java | 14 +- .../com/mybatisflex/test/ListenerTest.java | 31 +++- ...elationsTester.java => RelationsTest.java} | 98 +++++++---- .../{RowTestStarter.java => RowTest.java} | 72 +++++--- .../com/mybatisflex/test/UpdateChainTest.java | 8 +- .../resources/relation/onetoone/data.sql | 0 .../resources/relation/onetoone/menu.txt | 0 .../resources/relation/onetoone/schema.sql | 29 ++-- .../result/account-page-relation-result.json | 85 ++++++++++ .../result/account-relation-result.json | 112 +++++++++++++ .../result/accountDto-relation-result.json | 155 ++++++++++++++++++ .../relation/result/book-relation-result.json | 138 ++++++++++++++++ .../menu-relation-ignore-parent-result.json | 90 ++++++++++ .../relation/result/menu-relation-result.json | 120 ++++++++++++++ mybatis-flex-test/pom.xml | 15 ++ 22 files changed, 931 insertions(+), 94 deletions(-) rename mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/{RelationsTester.java => RelationsTest.java} (56%) rename mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/{RowTestStarter.java => RowTest.java} (56%) rename mybatis-flex-test/mybatis-flex-native-test/src/{main => test}/resources/relation/onetoone/data.sql (100%) rename mybatis-flex-test/mybatis-flex-native-test/src/{main => test}/resources/relation/onetoone/menu.txt (100%) rename mybatis-flex-test/mybatis-flex-native-test/src/{main => test}/resources/relation/onetoone/schema.sql (62%) create mode 100644 mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/result/account-page-relation-result.json create mode 100644 mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/result/account-relation-result.json create mode 100644 mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/result/accountDto-relation-result.json create mode 100644 mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/result/book-relation-result.json create mode 100644 mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/result/menu-relation-ignore-parent-result.json create mode 100644 mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/result/menu-relation-result.json diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/relation/onetoone/Account.java b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/relation/onetoone/Account.java index fd515cf0..1d5c7203 100644 --- a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/relation/onetoone/Account.java +++ b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/relation/onetoone/Account.java @@ -17,7 +17,6 @@ package com.mybatisflex.test.relation.onetoone; import com.mybatisflex.annotation.Id; -import com.mybatisflex.annotation.KeyType; import com.mybatisflex.annotation.RelationManyToMany; import com.mybatisflex.annotation.Table; @@ -28,7 +27,7 @@ import java.util.Map; @Table(value = "tb_account") public class Account implements Serializable { - @Id(keyType = KeyType.Auto) + @Id private Long id; private String userName; diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/relation/onetoone/AccountDTO.java b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/relation/onetoone/AccountDTO.java index 13644a27..efab845d 100644 --- a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/relation/onetoone/AccountDTO.java +++ b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/relation/onetoone/AccountDTO.java @@ -45,7 +45,8 @@ public class AccountDTO implements Serializable { @RelationManyToMany( joinTable = "tb_role_mapping", joinSelfColumn = "account_id", - joinTargetColumn = "role_id" + joinTargetColumn = "role_id", + selfField = "id" ) private List roles; diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/relation/onetoone/Role.java b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/relation/onetoone/Role.java index 100e3c81..f52326bc 100644 --- a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/relation/onetoone/Role.java +++ b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/relation/onetoone/Role.java @@ -16,6 +16,7 @@ package com.mybatisflex.test.relation.onetoone; +import com.mybatisflex.annotation.Id; import com.mybatisflex.annotation.RelationManyToMany; import com.mybatisflex.annotation.Table; @@ -25,6 +26,7 @@ import java.util.List; @Table(value = "tb_role") public class Role implements Serializable { + @Id private Long id; private String name; diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/Account6Test.java b/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/Account6Test.java index d43ea0cd..f0059590 100644 --- a/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/Account6Test.java +++ b/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/Account6Test.java @@ -3,6 +3,7 @@ package com.mybatisflex.test; import com.mybatisflex.core.MybatisFlexBootstrap; import com.mybatisflex.core.audit.AuditManager; import com.mybatisflex.core.audit.ConsoleMessageCollector; +import com.mybatisflex.core.datasource.DataSourceKey; import com.mybatisflex.mapper.Account6Mapper; import org.apache.ibatis.logging.stdout.StdOutImpl; import org.assertj.core.api.InstanceOfAssertFactories; @@ -28,6 +29,8 @@ public class Account6Test implements WithAssertions { private EmbeddedDatabase dataSource; private Account6Mapper mapper; + private static final String DATA_SOURCE_KEY = "none_key"; + @BeforeClass public static void enableAudit() { AuditManager.setAuditEnable(true); @@ -43,17 +46,20 @@ public class Account6Test implements WithAssertions { .build(); MybatisFlexBootstrap bootstrap = new MybatisFlexBootstrap() - .setDataSource(this.dataSource) + .setDataSource(DATA_SOURCE_KEY, this.dataSource) .setLogImpl(StdOutImpl.class) .addMapper(Account6Mapper.class) .start(); + DataSourceKey.use(DATA_SOURCE_KEY); + mapper = bootstrap.getMapper(Account6Mapper.class); } @After public void destroy() { this.dataSource.shutdown(); + DataSourceKey.clear(); } /** diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/Account7Test.java b/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/Account7Test.java index 69f8252e..97211b8c 100644 --- a/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/Account7Test.java +++ b/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/Account7Test.java @@ -3,6 +3,7 @@ package com.mybatisflex.test; import com.mybatisflex.core.MybatisFlexBootstrap; import com.mybatisflex.core.audit.AuditManager; import com.mybatisflex.core.audit.ConsoleMessageCollector; +import com.mybatisflex.core.datasource.DataSourceKey; import com.mybatisflex.core.keygen.KeyGeneratorFactory; import org.apache.ibatis.logging.stdout.StdOutImpl; import org.assertj.core.api.WithAssertions; @@ -28,6 +29,8 @@ public class Account7Test implements WithAssertions { private EmbeddedDatabase dataSource; private Account7Mapper mapper; + private static final String DATA_SOURCE_KEY = "generate_key"; + @BeforeClass public static void enableAudit() { AuditManager.setAuditEnable(true); @@ -45,17 +48,20 @@ public class Account7Test implements WithAssertions { .build(); MybatisFlexBootstrap bootstrap = new MybatisFlexBootstrap() - .setDataSource(this.dataSource) + .setDataSource(DATA_SOURCE_KEY, this.dataSource) .setLogImpl(StdOutImpl.class) .addMapper(Account7Mapper.class) .start(); + DataSourceKey.use(DATA_SOURCE_KEY); + mapper = bootstrap.getMapper(Account7Mapper.class); } @After public void destroy() { this.dataSource.shutdown(); + DataSourceKey.clear(); } /** diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/AccountInsertWithArrayAttrTest.java b/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/AccountInsertWithArrayAttrTest.java index a9b4792f..aba45745 100644 --- a/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/AccountInsertWithArrayAttrTest.java +++ b/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/AccountInsertWithArrayAttrTest.java @@ -18,6 +18,7 @@ package com.mybatisflex.test; import com.mybatisflex.core.MybatisFlexBootstrap; import com.mybatisflex.core.audit.AuditManager; import com.mybatisflex.core.audit.ConsoleMessageCollector; +import com.mybatisflex.core.datasource.DataSourceKey; import com.mybatisflex.mapper.Account5Mapper; import org.assertj.core.api.WithAssertions; import org.junit.After; @@ -34,6 +35,8 @@ public class AccountInsertWithArrayAttrTest implements WithAssertions { private Account5Mapper accountMapper; private EmbeddedDatabase dataSource; + private static final String DATA_SOURCE_KEY = "data05"; + @BeforeClass public static void enableAudit() { AuditManager.setAuditEnable(true); @@ -49,16 +52,19 @@ public class AccountInsertWithArrayAttrTest implements WithAssertions { .build(); MybatisFlexBootstrap bootstrap = new MybatisFlexBootstrap() - .setDataSource(dataSource) + .setDataSource(DATA_SOURCE_KEY, dataSource) .addMapper(Account5Mapper.class) .start(); + DataSourceKey.use(DATA_SOURCE_KEY); + accountMapper = bootstrap.getMapper(Account5Mapper.class); } @After public void destroy() { this.dataSource.shutdown(); + DataSourceKey.clear(); } @Test @@ -70,7 +76,7 @@ public class AccountInsertWithArrayAttrTest implements WithAssertions { account.setDataScope(new Long[]{1L, 2L}); accountMapper.insertWithPk(account, false); - // todo 查询有问题,会抛出 argument type mismatch + // todo argument type mismatch Account5 result = accountMapper.selectOneById(3L); assertThat(result).isNotNull() .extracting(Account5::getUserName, Account5::getDataScope) diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/AccountNativeTest.java b/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/AccountNativeTest.java index aaf69577..6cf4ce3c 100644 --- a/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/AccountNativeTest.java +++ b/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/AccountNativeTest.java @@ -19,6 +19,7 @@ import com.mybatisflex.core.FlexGlobalConfig; import com.mybatisflex.core.MybatisFlexBootstrap; import com.mybatisflex.core.audit.AuditManager; import com.mybatisflex.core.audit.ConsoleMessageCollector; +import com.mybatisflex.core.datasource.DataSourceKey; import com.mybatisflex.core.mybatis.Mappers; import com.mybatisflex.core.query.If; import com.mybatisflex.core.query.QueryWrapper; @@ -52,6 +53,8 @@ public class AccountNativeTest implements WithAssertions { private AccountMapper accountMapper; private ArticleMapper articleMapper; + private static final String DATA_SOURCE_KEY = "auto_increment"; + @BeforeClass public static void enableAudit() { AuditManager.setAuditEnable(true); @@ -68,12 +71,14 @@ public class AccountNativeTest implements WithAssertions { .build(); MybatisFlexBootstrap bootstrap = new MybatisFlexBootstrap() - .setDataSource(this.dataSource) + .setDataSource(DATA_SOURCE_KEY, this.dataSource) .setLogImpl(StdOutImpl.class) .addMapper(AccountMapper.class) .addMapper(ArticleMapper.class) .start(); + DataSourceKey.use(DATA_SOURCE_KEY); + accountMapper = bootstrap.getMapper(AccountMapper.class); articleMapper = bootstrap.getMapper(ArticleMapper.class); } @@ -81,6 +86,7 @@ public class AccountNativeTest implements WithAssertions { @After public void destroy() { this.dataSource.shutdown(); + DataSourceKey.clear(); } @Test @@ -154,19 +160,21 @@ public class AccountNativeTest implements WithAssertions { * issues https://gitee.com/mybatis-flex/mybatis-flex/issues/I7QD29 */ @Test - @Ignore public void testGiteeIssue_I7QD29() { QueryWrapper queryWrapper = QueryWrapper.create(); queryWrapper.from(ACCOUNT) - .leftJoin(ACCOUNT).as("a1").on(ACCOUNT.ID.eq(ARTICLE.ACCOUNT_ID)) - .leftJoin(ACCOUNT).as("a2").on(ACCOUNT.ID.eq(ARTICLE.ACCOUNT_ID)) + .leftJoin(ARTICLE).as("a1").on(ACCOUNT.ID.eq(ARTICLE.ACCOUNT_ID)) + .leftJoin(ARTICLE).as("a2").on(ACCOUNT.ID.eq(ARTICLE.ACCOUNT_ID)) .where(ACCOUNT.ID.ge(1)); - // todo Column "TB_ARTICLE.ACCOUNT_ID" not found List
accounts = articleMapper.selectListByQuery(queryWrapper); - System.out.println(accounts); + String expectSql = "SELECT * FROM `tb_account` " + + "LEFT JOIN `tb_article` AS `a1` ON `tb_account`.`id` = `a1`.`account_id` AND `a1`.`is_delete` = 0 " + + "LEFT JOIN `tb_article` AS `a2` ON `tb_account`.`id` = `a1`.`account_id` AND `a2`.`is_delete` = 0 " + + "WHERE `tb_account`.`id` >= 1"; + assertThat(queryWrapper.toSQL()).isEqualTo(expectSql); + assertThat(accounts).hasSize(9); } - /** * issues https://gitee.com/mybatis-flex/mybatis-flex/issues/I7VAG8 */ @@ -205,7 +213,7 @@ public class AccountNativeTest implements WithAssertions { // 设置 Ignore 字段,会被自动忽略 .setRaw(Account::getTitle, "xxxx") .toEntity(); - // todo Column "TITLE" not found + // todo title not found accountMapper.update(account); } diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/DbChainTest.java b/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/DbChainTest.java index 04ebddcf..0915e4ff 100644 --- a/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/DbChainTest.java +++ b/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/DbChainTest.java @@ -16,13 +16,11 @@ package com.mybatisflex.test; -import com.mybatisflex.core.MybatisFlexBootstrap; import com.mybatisflex.core.audit.AuditManager; import com.mybatisflex.core.audit.ConsoleMessageCollector; import com.mybatisflex.core.row.DbChain; import com.mybatisflex.core.row.Row; import com.mybatisflex.core.row.RowKey; -import com.mybatisflex.core.row.RowUtil; import lombok.SneakyThrows; import org.assertj.core.api.WithAssertions; import org.junit.After; @@ -46,6 +44,7 @@ public class DbChainTest implements WithAssertions { private static final String[] PROPERTIES = new String[]{"ID", "USER_NAME", "AGE", "BIRTHDAY"}; private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); + private static final String ENVIRONMENT_ID = "db_chain"; private EmbeddedDatabase database; @@ -63,9 +62,13 @@ public class DbChainTest implements WithAssertions { .addScript("auto_increment_key_data.sql") .build(); - new MybatisFlexBootstrap() - .setDataSource(this.database) - .start(); + // Environment environment = new Environment(ENVIRONMENT_ID, new JdbcTransactionFactory(), this.database); + // FlexConfiguration configuration = new FlexConfiguration(environment); + // configuration.addMapper(RowMapper.class); + // FlexGlobalConfig flexGlobalConfig = new FlexGlobalConfig(); + // flexGlobalConfig.setConfiguration(configuration); + // flexGlobalConfig.setSqlSessionFactory(new DefaultSqlSessionFactory(configuration)); + // FlexGlobalConfig.setConfig(environment.getId(), flexGlobalConfig, false); } @After @@ -122,7 +125,6 @@ public class DbChainTest implements WithAssertions { assertThat(count).isEqualTo(1L); List tb_account = DbChain.table("tb_account").list(); - RowUtil.printPretty(tb_account); assertThat(tb_account).hasSize(1) .extracting(PROPERTIES) diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/ListenerTest.java b/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/ListenerTest.java index 3b321243..2c9a0e96 100644 --- a/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/ListenerTest.java +++ b/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/ListenerTest.java @@ -18,13 +18,16 @@ package com.mybatisflex.test; import com.mybatisflex.core.FlexGlobalConfig; import com.mybatisflex.core.MybatisFlexBootstrap; +import com.mybatisflex.core.datasource.DataSourceKey; import org.apache.ibatis.logging.stdout.StdOutImpl; import org.assertj.core.api.WithAssertions; +import org.junit.After; +import org.junit.Before; import org.junit.Test; +import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; -import javax.sql.DataSource; import java.util.Date; /** @@ -35,9 +38,14 @@ import java.util.Date; */ public class ListenerTest implements WithAssertions { - @Test - public void onInsertInterface() { - DataSource dataSource = new EmbeddedDatabaseBuilder() + private static final String DATA_SOURCE_KEY = "listener"; + + private AccountMapper accountMapper; + private EmbeddedDatabase dataSource; + + @Before + public void init() { + dataSource = new EmbeddedDatabaseBuilder() .setType(EmbeddedDatabaseType.H2) .addScript("auto_increment_key_schema.sql") .build(); @@ -48,11 +56,22 @@ public class ListenerTest implements WithAssertions { MybatisFlexBootstrap bootstrap = new MybatisFlexBootstrap() .setLogImpl(StdOutImpl.class) - .setDataSource(dataSource) + .setDataSource(DATA_SOURCE_KEY, dataSource) .addMapper(AccountMapper.class) .start(); - AccountMapper accountMapper = bootstrap.getMapper(AccountMapper.class); + DataSourceKey.use(DATA_SOURCE_KEY); + accountMapper = bootstrap.getMapper(AccountMapper.class); + } + + @After + public void destroy() { + this.dataSource.shutdown(); + DataSourceKey.clear(); + } + + @Test + public void onInsertInterface() { Account account = new Account(); account.setAge(-2); account.setUserName("on insert"); diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/RelationsTester.java b/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/RelationsTest.java similarity index 56% rename from mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/RelationsTester.java rename to mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/RelationsTest.java index 0e57cf23..49a2353a 100644 --- a/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/RelationsTester.java +++ b/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/RelationsTest.java @@ -15,11 +15,11 @@ */ package com.mybatisflex.test; -import com.alibaba.fastjson.JSON; +import com.fasterxml.jackson.databind.json.JsonMapper; import com.mybatisflex.core.MybatisFlexBootstrap; import com.mybatisflex.core.audit.AuditManager; import com.mybatisflex.core.audit.ConsoleMessageCollector; -import com.mybatisflex.core.audit.MessageCollector; +import com.mybatisflex.core.datasource.DataSourceKey; import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.core.relation.RelationManager; @@ -30,78 +30,103 @@ import com.mybatisflex.test.relation.onetoone.Account; import com.mybatisflex.test.relation.onetoone.AccountDTO; import com.mybatisflex.test.relation.onetoone.Book; import com.mybatisflex.test.relation.onetoone.Menu; +import lombok.SneakyThrows; +import net.javacrumbs.jsonunit.assertj.JsonAssertions; +import org.apache.commons.io.FileUtils; +import org.assertj.core.api.WithAssertions; +import org.junit.After; +import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; +import org.springframework.core.io.ClassPathResource; +import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; -import javax.sql.DataSource; +import java.nio.charset.StandardCharsets; import java.util.List; import static com.mybatisflex.test.relation.onetoone.table.MenuTableDef.MENU; -public class RelationsTester { +public class RelationsTest implements WithAssertions { - static AccountMapper accountMapper; - static BookMapper bookMapper; - static MenuMapper menuMapper; + private AccountMapper accountMapper; + private BookMapper bookMapper; + private MenuMapper menuMapper; + private EmbeddedDatabase dataSource; + + private static final String DATA_SOURCE_KEY = "relation-onetoone"; + private static final JsonMapper JSON_MAPPER = JsonMapper.builder().build(); @BeforeClass - public static void init() { - DataSource dataSource = new EmbeddedDatabaseBuilder() + public static void enableAudit() { + AuditManager.setAuditEnable(true); + AuditManager.setMessageCollector(new ConsoleMessageCollector()); + } + + @Before + public void init() { + dataSource = new EmbeddedDatabaseBuilder() .setType(EmbeddedDatabaseType.H2) .addScript("relation/onetoone/schema.sql") .addScript("relation/onetoone/data.sql") .build(); MybatisFlexBootstrap bootstrap = MybatisFlexBootstrap.getInstance() - .setDataSource(dataSource) + .setDataSource(DATA_SOURCE_KEY, dataSource) .addMapper(AccountMapper.class) .addMapper(BookMapper.class) .addMapper(MenuMapper.class) .start(); - //开启审计功能 - AuditManager.setAuditEnable(true); - - //设置 SQL 审计收集器 - MessageCollector collector = new ConsoleMessageCollector(); - AuditManager.setMessageCollector(collector); + DataSourceKey.use(DATA_SOURCE_KEY); accountMapper = bootstrap.getMapper(AccountMapper.class); bookMapper = bootstrap.getMapper(BookMapper.class); menuMapper = bootstrap.getMapper(MenuMapper.class); } - - @Test - public void testOneToOne() { - List accounts = accountMapper.selectAllWithRelations(); - System.out.println(JSON.toJSONString(accounts)); + @After + public void destroy() { + this.dataSource.shutdown(); + DataSourceKey.clear(); } + @Test + @SneakyThrows + public void testOneToOne() { + List accounts = accountMapper.selectAllWithRelations(); + assertThat(accounts).hasSize(5); + assertRelationResult(accounts, "relation/result/account-relation-result.json"); + } @Test public void testManyToOne() { List books = bookMapper.selectAll(); - System.out.println(">>>>>>1: " + books); + assertThat(books).hasSize(6) + .extracting(Book::getId) + .containsExactly(1L, 2L, 3L, 4L, 5L, 6L); + RelationManager.queryRelations(bookMapper, books); - System.out.println(">>>>>>2: " + books); + assertRelationResult(books, "relation/result/book-relation-result.json"); } @Test public void testManyToMany1() { List accounts = accountMapper.selectAll(); - System.out.println(">>>>>>1: " + accounts); + assertThat(accounts).hasSize(5) + .extracting(Account::getId) + .containsExactly(1L, 2L, 3L, 4L, 5L); + RelationManager.queryRelations(accountMapper, accounts); - System.out.println(">>>>>>2: " + accounts); + assertRelationResult(accounts, "relation/result/account-relation-result.json"); } @Test public void testAsDto() { List accounts = accountMapper.selectListWithRelationsByQueryAs(QueryWrapper.create(), AccountDTO.class); - System.out.println(">>>>>>1: " + accounts); + assertRelationResult(accounts, "relation/result/accountDto-relation-result.json"); } @Test @@ -110,7 +135,7 @@ public class RelationsTester { qw.where(MENU.PARENT_ID.eq(0)); List menus = menuMapper.selectListWithRelationsByQuery(qw); - System.out.println(JSON.toJSONString(menus)); + assertRelationResult(menus, "relation/result/menu-relation-result.json"); } @Test @@ -120,14 +145,29 @@ public class RelationsTester { RelationManager.addIgnoreRelations("parent"); List menus = menuMapper.selectListWithRelationsByQuery(qw); - System.out.println(JSON.toJSONString(menus)); + assertRelationResult(menus, "relation/result/menu-relation-ignore-parent-result.json"); } @Test public void testPaginate() { Page accountPage = accountMapper.paginateWithRelations(1, 2, QueryWrapper.create()); - System.out.println(accountPage); + assertRelationResult(accountPage.getRecords(), "relation/result/account-page-relation-result.json"); } + private void assertRelationResult(Object object, String classPath) { + String resultJson = writeObject2String(object); + String expectJson = getFileAsString(classPath); + JsonAssertions.assertThatJson(resultJson).isEqualTo(expectJson); + } + @SneakyThrows + private String writeObject2String(Object object) { + return JSON_MAPPER.writeValueAsString(object); + } + + @SneakyThrows + private String getFileAsString(String classPath) { + ClassPathResource resource = new ClassPathResource(classPath); + return FileUtils.readFileToString(resource.getFile(), StandardCharsets.UTF_8); + } } diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/RowTestStarter.java b/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/RowTest.java similarity index 56% rename from mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/RowTestStarter.java rename to mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/RowTest.java index 8cee545a..aa02a32e 100644 --- a/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/RowTestStarter.java +++ b/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/RowTest.java @@ -19,76 +19,104 @@ import com.mybatisflex.annotation.KeyType; import com.mybatisflex.core.MybatisFlexBootstrap; import com.mybatisflex.core.audit.AuditManager; import com.mybatisflex.core.audit.ConsoleMessageCollector; +import com.mybatisflex.core.datasource.DataSourceKey; import com.mybatisflex.core.keygen.KeyGenerators; import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.core.row.Db; import com.mybatisflex.core.row.Row; import com.mybatisflex.core.row.RowKey; -import com.mybatisflex.core.row.RowUtil; import org.apache.ibatis.logging.stdout.StdOutImpl; +import org.assertj.core.api.WithAssertions; +import org.junit.After; +import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; +import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; -import javax.sql.DataSource; import java.util.List; import static com.mybatisflex.test.relation.onetoone.table.AccountTableDef.ACCOUNT; -public class RowTestStarter { +public class RowTest implements WithAssertions { + + private static final String DATA_SOURCE_KEY = "row"; + + private EmbeddedDatabase dataSource; @BeforeClass - public static void init() { - DataSource dataSource = new EmbeddedDatabaseBuilder() + public static void enableAudit() { + AuditManager.setAuditEnable(true); + AuditManager.setMessageCollector(new ConsoleMessageCollector()); + } + + @Before + public void init() { + dataSource = new EmbeddedDatabaseBuilder() .setType(EmbeddedDatabaseType.H2) .addScript("schema_row.sql") .addScript("data_row.sql") .build(); - MybatisFlexBootstrap.getInstance() - .setDataSource(dataSource) + new MybatisFlexBootstrap().setDataSource(DATA_SOURCE_KEY, dataSource) .setLogImpl(StdOutImpl.class) .start(); - AuditManager.setAuditEnable(true); - AuditManager.setMessageCollector(new ConsoleMessageCollector()); + DataSourceKey.use(DATA_SOURCE_KEY); } + @After + public void destroy() { + this.dataSource.shutdown(); + DataSourceKey.clear(); + } @Test - public void testSetRaw(){ + public void testSetRaw() { Row row = new Row(); - row.set("user_name","michael"); - row.setRaw("birthday","now()"); + row.set("user_name", "michael"); + row.setRaw("birthday", "now()"); - Db.insert("tb_account",row); + Db.insert("tb_account", row); List rowList = Db.selectAll("tb_account"); - RowUtil.printPretty(rowList); + assertThat(rowList).hasSize(3) + .extracting("USER_NAME") + .containsOnly("张三", "王麻子叔叔", "michael"); + // 插入的数据没有 id + assertThat(row).doesNotContainKey("id"); } @Test - public void testCustomRowKey(){ + public void testCustomRowKey() { RowKey rowKey = RowKey.of("id", KeyType.Generator, KeyGenerators.flexId); Row row = Row.ofKey(rowKey); - row.set("user_name","michael"); - row.setRaw("birthday","now()"); + row.set("user_name", "michael"); + row.setRaw("birthday", "now()"); - Db.insert("tb_account",row); + Db.insert("tb_account", row); List rowList = Db.selectAll("tb_account"); - RowUtil.printPretty(rowList); + assertThat(rowList).hasSize(3) + .extracting("USER_NAME") + .containsOnly("张三", "王麻子叔叔", "michael"); + // 指定了主键生成策略,有 ID 值 + assertThat(row).containsKey("id") + .extracting("id") + .isInstanceOf(Long.class); } - //https://gitee.com/mybatis-flex/mybatis-flex/issues/I7W7HQ + // https://gitee.com/mybatis-flex/mybatis-flex/issues/I7W7HQ @Test - public void testRow01(){ + public void testGiteeIssue_I7W7HQ() { QueryWrapper qw = QueryWrapper.create().select("id, MAX(`tb_account`.`age`)") .groupBy("id") .from(ACCOUNT); List rowList = Db.selectListByQuery(qw); - RowUtil.printPretty(rowList); + assertThat(rowList).hasSize(2) + .extracting("MAX(TB_ACCOUNT.AGE)") + .containsOnly(18, 19); } } diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/UpdateChainTest.java b/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/UpdateChainTest.java index 074b7e50..37d431e2 100644 --- a/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/UpdateChainTest.java +++ b/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/UpdateChainTest.java @@ -19,6 +19,7 @@ package com.mybatisflex.test; import com.mybatisflex.core.MybatisFlexBootstrap; import com.mybatisflex.core.audit.AuditManager; import com.mybatisflex.core.audit.ConsoleMessageCollector; +import com.mybatisflex.core.datasource.DataSourceKey; import com.mybatisflex.core.query.QueryChain; import com.mybatisflex.core.update.UpdateChain; import lombok.SneakyThrows; @@ -44,6 +45,8 @@ public class UpdateChainTest implements WithAssertions { private AccountMapper accountMapper; private EmbeddedDatabase dataSource; + private static final String DATA_SOURCE_KEY = "ds2"; + @BeforeClass public static void enableAudit() { AuditManager.setAuditEnable(true); @@ -59,16 +62,19 @@ public class UpdateChainTest implements WithAssertions { .build(); MybatisFlexBootstrap bootstrap = new MybatisFlexBootstrap() - .setDataSource(this.dataSource) + .setDataSource(DATA_SOURCE_KEY, this.dataSource) .setLogImpl(StdOutImpl.class) .addMapper(AccountMapper.class) .start(); + + DataSourceKey.use(DATA_SOURCE_KEY); accountMapper = bootstrap.getMapper(AccountMapper.class); } @After public void destroy() { this.dataSource.shutdown(); + DataSourceKey.clear(); } @Test diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/main/resources/relation/onetoone/data.sql b/mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/onetoone/data.sql similarity index 100% rename from mybatis-flex-test/mybatis-flex-native-test/src/main/resources/relation/onetoone/data.sql rename to mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/onetoone/data.sql diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/main/resources/relation/onetoone/menu.txt b/mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/onetoone/menu.txt similarity index 100% rename from mybatis-flex-test/mybatis-flex-native-test/src/main/resources/relation/onetoone/menu.txt rename to mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/onetoone/menu.txt diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/main/resources/relation/onetoone/schema.sql b/mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/onetoone/schema.sql similarity index 62% rename from mybatis-flex-test/mybatis-flex-native-test/src/main/resources/relation/onetoone/schema.sql rename to mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/onetoone/schema.sql index 6c68202a..a92a9720 100644 --- a/mybatis-flex-test/mybatis-flex-native-test/src/main/resources/relation/onetoone/schema.sql +++ b/mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/onetoone/schema.sql @@ -1,11 +1,11 @@ CREATE TABLE IF NOT EXISTS `tb_account` ( - `id` INTEGER auto_increment, + `id` INTEGER, `user_name` VARCHAR(100), - `age` Integer + `age` Integer, + PRIMARY KEY(id) ); - CREATE TABLE IF NOT EXISTS `tb_idcard` ( `account_id` Integer, @@ -13,39 +13,38 @@ CREATE TABLE IF NOT EXISTS `tb_idcard` `content` text ); - CREATE TABLE IF NOT EXISTS `tb_idcard_mapping` ( `account_id` Integer, `idcard_id` Integer ); - - - CREATE TABLE IF NOT EXISTS `tb_book` ( - `id` INTEGER auto_increment, + `id` INTEGER, `account_id` Integer, `title` VARCHAR(100), - `content` text + `content` text, + PRIMARY KEY(id) ); CREATE TABLE IF NOT EXISTS `tb_role` ( - `id` INTEGER auto_increment, - `name` VARCHAR(100) + `id` INTEGER, + `name` VARCHAR(100), + PRIMARY KEY(id) ); CREATE TABLE IF NOT EXISTS `tb_role_mapping` ( - `account_id` INTEGER , + `account_id` INTEGER , `role_id` INTEGER ); CREATE TABLE IF NOT EXISTS `tb_menu` ( - `id` INTEGER auto_increment, - `parent_id` INTEGER, - `name` VARCHAR(100) + `id` INTEGER, + `parent_id` INTEGER, + `name` VARCHAR(100), + PRIMARY KEY(id) ); diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/result/account-page-relation-result.json b/mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/result/account-page-relation-result.json new file mode 100644 index 00000000..2898db96 --- /dev/null +++ b/mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/result/account-page-relation-result.json @@ -0,0 +1,85 @@ +[ + { + "id": 1, + "userName": "孙悟空", + "age": 18, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": { + "3": { + "id": 3, + "name": "角色3", + "accounts": [ + { + "id": 1, + "userName": "孙悟空", + "age": 18, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": null + }, + { + "id": 2, + "userName": "猪八戒", + "age": 19, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": null + } + ] + } + } + }, + { + "id": 2, + "userName": "猪八戒", + "age": 19, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": { + "2": { + "id": 2, + "name": "角色2", + "accounts": [ + { + "id": 2, + "userName": "猪八戒", + "age": 19, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": null + } + ] + }, + "3": { + "id": 3, + "name": "角色3", + "accounts": [ + { + "id": 1, + "userName": "孙悟空", + "age": 18, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": null + }, + { + "id": 2, + "userName": "猪八戒", + "age": 19, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": null + } + ] + } + } + } +] diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/result/account-relation-result.json b/mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/result/account-relation-result.json new file mode 100644 index 00000000..60aefc5a --- /dev/null +++ b/mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/result/account-relation-result.json @@ -0,0 +1,112 @@ +[ + { + "id": 1, + "userName": "孙悟空", + "age": 18, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": { + "3": { + "id": 3, + "name": "角色3", + "accounts": [ + { + "id": 1, + "userName": "孙悟空", + "age": 18, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": null + }, + { + "id": 2, + "userName": "猪八戒", + "age": 19, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": null + } + ] + } + } + }, + { + "id": 2, + "userName": "猪八戒", + "age": 19, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": { + "2": { + "id": 2, + "name": "角色2", + "accounts": [ + { + "id": 2, + "userName": "猪八戒", + "age": 19, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": null + } + ] + }, + "3": { + "id": 3, + "name": "角色3", + "accounts": [ + { + "id": 1, + "userName": "孙悟空", + "age": 18, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": null + }, + { + "id": 2, + "userName": "猪八戒", + "age": 19, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": null + } + ] + } + } + }, + { + "id": 3, + "userName": "沙和尚", + "age": 19, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": null + }, + { + "id": 4, + "userName": "六耳猕猴", + "age": 19, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": null + }, + { + "id": 5, + "userName": "王麻子叔叔", + "age": 19, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": null + } +] diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/result/accountDto-relation-result.json b/mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/result/accountDto-relation-result.json new file mode 100644 index 00000000..981df3fa --- /dev/null +++ b/mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/result/accountDto-relation-result.json @@ -0,0 +1,155 @@ +[ + { + "id": 1, + "userName": "孙悟空", + "age": 18, + "idCard": null, + "books": [], + "roles": [ + { + "id": 1, + "name": "角色1", + "accounts": [ + { + "id": 1, + "userName": "孙悟空", + "age": 18, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": null + }, + { + "id": 2, + "userName": "猪八戒", + "age": 19, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": null + } + ] + }, + { + "id": 3, + "name": "角色3", + "accounts": [ + { + "id": 1, + "userName": "孙悟空", + "age": 18, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": null + }, + { + "id": 2, + "userName": "猪八戒", + "age": 19, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": null + } + ] + } + ] + }, + { + "id": 2, + "userName": "猪八戒", + "age": 19, + "idCard": null, + "books": [], + "roles": [ + { + "id": 1, + "name": "角色1", + "accounts": [ + { + "id": 1, + "userName": "孙悟空", + "age": 18, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": null + }, + { + "id": 2, + "userName": "猪八戒", + "age": 19, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": null + } + ] + }, + { + "id": 2, + "name": "角色2", + "accounts": [ + { + "id": 2, + "userName": "猪八戒", + "age": 19, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": null + } + ] + }, + { + "id": 3, + "name": "角色3", + "accounts": [ + { + "id": 1, + "userName": "孙悟空", + "age": 18, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": null + }, + { + "id": 2, + "userName": "猪八戒", + "age": 19, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": null + } + ] + } + ] + }, + { + "id": 3, + "userName": "沙和尚", + "age": 19, + "idCard": null, + "books": [], + "roles": null + }, + { + "id": 4, + "userName": "六耳猕猴", + "age": 19, + "idCard": null, + "books": [], + "roles": null + }, + { + "id": 5, + "userName": "王麻子叔叔", + "age": 19, + "idCard": null, + "books": [], + "roles": null + } +] diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/result/book-relation-result.json b/mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/result/book-relation-result.json new file mode 100644 index 00000000..178f5f84 --- /dev/null +++ b/mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/result/book-relation-result.json @@ -0,0 +1,138 @@ +[ + { + "id": 1, + "accountId": 1, + "title": "图书1", + "content": "内容1", + "account": { + "id": 1, + "userName": "孙悟空", + "age": 18, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": { + "3": { + "id": 3, + "name": "角色3", + "accounts": [] + } + } + } + }, + { + "id": 2, + "accountId": 2, + "title": "图书2", + "content": "内容2", + "account": { + "id": 2, + "userName": "猪八戒", + "age": 19, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": { + "2": { + "id": 2, + "name": "角色2", + "accounts": [] + }, + "3": { + "id": 3, + "name": "角色3", + "accounts": [] + } + } + } + }, + { + "id": 3, + "accountId": 1, + "title": "图书3", + "content": "内容2", + "account": { + "id": 1, + "userName": "孙悟空", + "age": 18, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": { + "3": { + "id": 3, + "name": "角色3", + "accounts": [] + } + } + } + }, + { + "id": 4, + "accountId": 1, + "title": "图书4", + "content": "内容2", + "account": { + "id": 1, + "userName": "孙悟空", + "age": 18, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": { + "3": { + "id": 3, + "name": "角色3", + "accounts": [] + } + } + } + }, + { + "id": 5, + "accountId": 1, + "title": "图书5", + "content": "内容2", + "account": { + "id": 1, + "userName": "孙悟空", + "age": 18, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": { + "3": { + "id": 3, + "name": "角色3", + "accounts": [] + } + } + } + }, + { + "id": 6, + "accountId": 2, + "title": "图书6", + "content": "内容2", + "account": { + "id": 2, + "userName": "猪八戒", + "age": 19, + "idCard": null, + "books": [], + "roles": [], + "rolesMap": { + "2": { + "id": 2, + "name": "角色2", + "accounts": [] + }, + "3": { + "id": 3, + "name": "角色3", + "accounts": [] + } + } + } + } +] diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/result/menu-relation-ignore-parent-result.json b/mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/result/menu-relation-ignore-parent-result.json new file mode 100644 index 00000000..b5eb3de9 --- /dev/null +++ b/mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/result/menu-relation-ignore-parent-result.json @@ -0,0 +1,90 @@ +[ + { + "id": 1, + "parentId": 0, + "name": "顶级菜单1", + "parent": null, + "children": [ + { + "id": 4, + "parentId": 1, + "name": "子菜单4", + "parent": null, + "children": [ + { + "id": 9, + "parentId": 4, + "name": "子菜单9", + "parent": null, + "children": null + }, + { + "id": 10, + "parentId": 4, + "name": "子菜单10", + "parent": null, + "children": null + } + ] + }, + { + "id": 5, + "parentId": 1, + "name": "子菜单5", + "parent": null, + "children": [ + { + "id": 11, + "parentId": 5, + "name": "子菜单11", + "parent": null, + "children": null + }, + { + "id": 12, + "parentId": 5, + "name": "子菜单12", + "parent": null, + "children": null + } + ] + } + ] + }, + { + "id": 2, + "parentId": 0, + "name": "顶级菜单2", + "parent": null, + "children": [] + }, + { + "id": 3, + "parentId": 0, + "name": "顶级菜单3", + "parent": null, + "children": [ + { + "id": 6, + "parentId": 3, + "name": "子菜单6", + "parent": null, + "children": [] + }, + { + "id": 7, + "parentId": 3, + "name": "子菜单7", + "parent": null, + "children": [] + }, + { + "id": 8, + "parentId": 3, + "name": "子菜单8", + "parent": null, + "children": [] + } + ] + } +] diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/result/menu-relation-result.json b/mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/result/menu-relation-result.json new file mode 100644 index 00000000..461f51d1 --- /dev/null +++ b/mybatis-flex-test/mybatis-flex-native-test/src/test/resources/relation/result/menu-relation-result.json @@ -0,0 +1,120 @@ +[ + { + "id": 1, + "parentId": 0, + "name": "顶级菜单1", + "parent": null, + "children": [ + { + "id": 4, + "parentId": 1, + "name": "子菜单4", + "parent": { + "id": 1, + "parentId": 0, + "name": "顶级菜单1", + "parent": null, + "children": null + }, + "children": [ + { + "id": 9, + "parentId": 4, + "name": "子菜单9", + "parent": null, + "children": null + }, + { + "id": 10, + "parentId": 4, + "name": "子菜单10", + "parent": null, + "children": null + } + ] + }, + { + "id": 5, + "parentId": 1, + "name": "子菜单5", + "parent": { + "id": 1, + "parentId": 0, + "name": "顶级菜单1", + "parent": null, + "children": null + }, + "children": [ + { + "id": 11, + "parentId": 5, + "name": "子菜单11", + "parent": null, + "children": null + }, + { + "id": 12, + "parentId": 5, + "name": "子菜单12", + "parent": null, + "children": null + } + ] + } + ] + }, + { + "id": 2, + "parentId": 0, + "name": "顶级菜单2", + "parent": null, + "children": [] + }, + { + "id": 3, + "parentId": 0, + "name": "顶级菜单3", + "parent": null, + "children": [ + { + "id": 6, + "parentId": 3, + "name": "子菜单6", + "parent": { + "id": 3, + "parentId": 0, + "name": "顶级菜单3", + "parent": null, + "children": null + }, + "children": [] + }, + { + "id": 7, + "parentId": 3, + "name": "子菜单7", + "parent": { + "id": 3, + "parentId": 0, + "name": "顶级菜单3", + "parent": null, + "children": null + }, + "children": [] + }, + { + "id": 8, + "parentId": 3, + "name": "子菜单8", + "parent": { + "id": 3, + "parentId": 0, + "name": "顶级菜单3", + "parent": null, + "children": null + }, + "children": [] + } + ] + } +] diff --git a/mybatis-flex-test/pom.xml b/mybatis-flex-test/pom.xml index 120f5895..9221e544 100644 --- a/mybatis-flex-test/pom.xml +++ b/mybatis-flex-test/pom.xml @@ -24,15 +24,30 @@ 8 8 + 2.15.1 1.18.30 + + 2.38.0 + + commons-io + commons-io + ${commons-io.version} + + org.projectlombok lombok ${org.projectlombok.version} + + + net.javacrumbs.json-unit + json-unit-assertj + ${json-unit-assertj.version} +