Commit 24e083b3ae93b4b1c6772244ac54db2f13a5f0b4
1 parent
0773a4c4
多模块重构 11:新增 H2 SQL 脚本的生成
Showing
11 changed files
with
50 additions
and
234 deletions
yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/util/RandomUtils.java
| @@ -3,6 +3,7 @@ package cn.iocoder.yudao.framework.test.core.util; | @@ -3,6 +3,7 @@ package cn.iocoder.yudao.framework.test.core.util; | ||
| 3 | import cn.hutool.core.util.ArrayUtil; | 3 | import cn.hutool.core.util.ArrayUtil; |
| 4 | import cn.hutool.core.util.RandomUtil; | 4 | import cn.hutool.core.util.RandomUtil; |
| 5 | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | 5 | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; |
| 6 | +import cn.iocoder.yudao.framework.common.util.collection.SetUtils; | ||
| 6 | import uk.co.jemos.podam.api.PodamFactory; | 7 | import uk.co.jemos.podam.api.PodamFactory; |
| 7 | import uk.co.jemos.podam.api.PodamFactoryImpl; | 8 | import uk.co.jemos.podam.api.PodamFactoryImpl; |
| 8 | 9 | ||
| @@ -21,6 +22,9 @@ public class RandomUtils { | @@ -21,6 +22,9 @@ public class RandomUtils { | ||
| 21 | 22 | ||
| 22 | private static final int RANDOM_STRING_LENGTH = 10; | 23 | private static final int RANDOM_STRING_LENGTH = 10; |
| 23 | 24 | ||
| 25 | + private static final Set<String> TINYINT_FIELDS = SetUtils.asSet("type", "category"); | ||
| 26 | + private static final int TINYINT_MAX = 127; | ||
| 27 | + | ||
| 24 | private static final int RANDOM_DATE_MAX = 30; | 28 | private static final int RANDOM_DATE_MAX = 30; |
| 25 | 29 | ||
| 26 | private static final int RANDOM_COLLECTION_LENGTH = 5; | 30 | private static final int RANDOM_COLLECTION_LENGTH = 5; |
| @@ -37,6 +41,10 @@ public class RandomUtils { | @@ -37,6 +41,10 @@ public class RandomUtils { | ||
| 37 | if (attributeMetadata.getAttributeName().equals("status")) { | 41 | if (attributeMetadata.getAttributeName().equals("status")) { |
| 38 | return RandomUtil.randomEle(CommonStatusEnum.values()).getStatus(); | 42 | return RandomUtil.randomEle(CommonStatusEnum.values()).getStatus(); |
| 39 | } | 43 | } |
| 44 | + // 针对部分字段,使用 tinyint 范围 | ||
| 45 | + if (TINYINT_FIELDS.contains(attributeMetadata.getAttributeName())) { | ||
| 46 | + return RandomUtil.randomInt(1, TINYINT_MAX + 1); | ||
| 47 | + } | ||
| 40 | return RandomUtil.randomInt(); | 48 | return RandomUtil.randomInt(); |
| 41 | }); | 49 | }); |
| 42 | // Boolean | 50 | // Boolean |
yudao-module-pay/yudao-module-pay-impl/src/test/resources/sql/create_tables.sql
| 1 | -CREATE TABLE IF NOT EXISTS "pay_merchant" | ||
| 2 | -( | 1 | +CREATE TABLE IF NOT EXISTS "pay_merchant" ( |
| 3 | "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, | 2 | "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, |
| 4 | "no" varchar(32) NOT NULL, | 3 | "no" varchar(32) NOT NULL, |
| 5 | "name" varchar(64) NOT NULL, | 4 | "name" varchar(64) NOT NULL, |
yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenEngine.java
| @@ -86,6 +86,7 @@ public class CodegenEngine { | @@ -86,6 +86,7 @@ public class CodegenEngine { | ||
| 86 | vueFilePath("api/${table.moduleName}/${classNameVar}.js")) | 86 | vueFilePath("api/${table.moduleName}/${classNameVar}.js")) |
| 87 | // SQL | 87 | // SQL |
| 88 | .put("codegen/sql/sql.vm", "sql/sql.sql") | 88 | .put("codegen/sql/sql.vm", "sql/sql.sql") |
| 89 | + .put("codegen/sql/h2.vm", "sql/h2.sql") | ||
| 89 | .build(); | 90 | .build(); |
| 90 | 91 | ||
| 91 | @Resource | 92 | @Resource |
yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/sql/h2.vm
0 → 100644
| 1 | +-- 将该建表 SQL 语句,添加到 yudao-module-${table.moduleName}-impl 模块的 test/resources/sql/create_tables.sql 文件里 | ||
| 2 | +CREATE TABLE IF NOT EXISTS "${table.tableName}" ( | ||
| 3 | +#foreach ($column in $columns) | ||
| 4 | + #if (${column.primaryKey})##处理主键 | ||
| 5 | + "${column.javaField}"#if (${column.javaType} == 'String') ${column.columnType} NOT NULL#else ${column.columnType} NOT NULL GENERATED BY DEFAULT AS IDENTITY#end, | ||
| 6 | + #else | ||
| 7 | + #if (${column.columnName} == 'create_time') | ||
| 8 | + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, | ||
| 9 | + #elseif (${column.columnName} == 'update_time') | ||
| 10 | + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | ||
| 11 | + #elseif (${column.columnName} == 'creator' || ${column.columnName} == 'updater') | ||
| 12 | + "${column.columnName}" ${column.columnType} DEFAULT '', | ||
| 13 | + #elseif (${column.columnName} == 'deleted') | ||
| 14 | + "deleted" bit NOT NULL DEFAULT FALSE, | ||
| 15 | + #else | ||
| 16 | + "${column.columnName}" ${column.columnType}#if (${column.nullable} == false) NOT NULL#end, | ||
| 17 | + #end | ||
| 18 | + #end | ||
| 19 | +#end | ||
| 20 | + PRIMARY KEY ("${primaryColumn.columnName}") | ||
| 21 | +) COMMENT '${table.tableComment}'; | ||
| 22 | + | ||
| 23 | +-- 将该删表 SQL 语句,添加到 yudao-module-${table.moduleName}-impl 模块的 test/resources/sql/clean.sql 文件里 | ||
| 24 | +DELETE FROM "${table.tableName}"; |
yudao-module-tool/yudao-module-tool-impl/src/test/resources/sql/clean.sql
| 1 | +DELETE FROM "tool_test_demo"; |
yudao-module-tool/yudao-module-tool-impl/src/test/resources/sql/create_tables.sql
| 1 | +CREATE TABLE IF NOT EXISTS "tool_test_demo" ( | ||
| 2 | + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, | ||
| 3 | + "name" varchar(100) NOT NULL, | ||
| 4 | + "status" tinyint NOT NULL, | ||
| 5 | + "type" tinyint NOT NULL, | ||
| 6 | + "category" tinyint NOT NULL, | ||
| 7 | + "remark" varchar(500), | ||
| 8 | + "creator" varchar(64) DEFAULT '''', | ||
| 9 | + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, | ||
| 10 | + "updater" varchar(64) DEFAULT '''', | ||
| 11 | + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | ||
| 12 | + "deleted" bit NOT NULL DEFAULT FALSE, | ||
| 13 | + PRIMARY KEY ("id") | ||
| 14 | +) COMMENT '字典类型表'; |
yudao-server/src/test/resources/application-unit-test.yaml deleted
| 1 | -spring: | ||
| 2 | - main: | ||
| 3 | - lazy-initialization: true # 开启懒加载,加快速度 | ||
| 4 | - banner-mode: off # 单元测试,禁用 Banner | ||
| 5 | - | ||
| 6 | ---- #################### 数据库相关配置 #################### | ||
| 7 | - | ||
| 8 | -spring: | ||
| 9 | - # 数据源配置项 | ||
| 10 | - datasource: | ||
| 11 | - name: ruoyi-vue-pro | ||
| 12 | - url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false; # MODE 使用 MySQL 模式;DATABASE_TO_UPPER 配置表和字段使用小写 | ||
| 13 | - driver-class-name: org.h2.Driver | ||
| 14 | - username: sa | ||
| 15 | - password: | ||
| 16 | - schema: classpath:sql/create_tables.sql # MySQL 转 H2 的语句,使用 https://www.jooq.org/translate/ 工具 | ||
| 17 | - druid: | ||
| 18 | - async-init: true # 单元测试,异步初始化 Druid 连接池,提升启动速度 | ||
| 19 | - initial-size: 1 # 单元测试,配置为 1,提升启动速度 | ||
| 20 | - | ||
| 21 | - # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 | ||
| 22 | - redis: | ||
| 23 | - host: 127.0.0.1 # 地址 | ||
| 24 | - port: 16379 # 端口(单元测试,使用 16379 端口) | ||
| 25 | - database: 0 # 数据库索引 | ||
| 26 | - | ||
| 27 | -mybatis: | ||
| 28 | - lazy-initialization: true # 单元测试,设置 MyBatis Mapper 延迟加载,加速每个单元测试 | ||
| 29 | - | ||
| 30 | ---- #################### 定时任务相关配置 #################### | ||
| 31 | - | ||
| 32 | ---- #################### 配置中心相关配置 #################### | ||
| 33 | - | ||
| 34 | ---- #################### 服务保障相关配置 #################### | ||
| 35 | - | ||
| 36 | -# Lock4j 配置项(单元测试,禁用 Lock4j) | ||
| 37 | - | ||
| 38 | -# Resilience4j 配置项 | ||
| 39 | - | ||
| 40 | ---- #################### 监控相关配置 #################### | ||
| 41 | - | ||
| 42 | ---- #################### 芋道相关配置 #################### | ||
| 43 | - | ||
| 44 | -# 芋道配置项,设置当前项目所有自定义的配置 |
yudao-server/src/test/resources/logback.xml deleted
| 1 | -<configuration> | ||
| 2 | - <!-- 由于单元测试未开启 Spring Boot 的上下文,所以只能使用 logback.xml 文件 --> | ||
| 3 | - | ||
| 4 | - <!-- 引用 Spring Boot 的 logback 基础配置 --> | ||
| 5 | - <include resource="org/springframework/boot/logging/logback/defaults.xml" /> | ||
| 6 | - | ||
| 7 | - <!-- 格式化输出:%d 表示日期,%X{tid} SkWalking 链路追踪编号,%thread 表示线程名,%-5level:级别从左显示 5 个字符宽度,%msg:日志消息,%n是换行符 --> | ||
| 8 | - <property name="PATTERN_DEFAULT" value="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%thread] [%tid] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/> | ||
| 9 | - | ||
| 10 | - <!-- 控制台 Appender --> | ||
| 11 | - <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> | ||
| 12 | - <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> | ||
| 13 | - <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout"> | ||
| 14 | - <pattern>${PATTERN_DEFAULT}</pattern> | ||
| 15 | - </layout> | ||
| 16 | - </encoder> | ||
| 17 | - </appender> | ||
| 18 | - | ||
| 19 | - <root level="INFO"> | ||
| 20 | - <appender-ref ref="STDOUT"/> | ||
| 21 | - </root> | ||
| 22 | - | ||
| 23 | -</configuration> |
yudao-server/src/test/resources/sql/clean.sql deleted
yudao-server/src/test/resources/sql/create_tables.sql deleted
| 1 | --- inf 开头的 DB | ||
| 2 | - | ||
| 3 | - | ||
| 4 | -CREATE TABLE IF NOT EXISTS "pay_merchant" | ||
| 5 | -( | ||
| 6 | - "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, | ||
| 7 | - "no" varchar(32) NOT NULL, | ||
| 8 | - "name" varchar(64) NOT NULL, | ||
| 9 | - "short_name" varchar(64) NOT NULL, | ||
| 10 | - "status" tinyint NOT NULL, | ||
| 11 | - "remark" varchar(255) DEFAULT NULL, | ||
| 12 | - "creator" varchar(64) DEFAULT '', | ||
| 13 | - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, | ||
| 14 | - "updater" varchar(64) DEFAULT '', | ||
| 15 | - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | ||
| 16 | - "deleted" bit(1) NOT NULL DEFAULT FALSE, | ||
| 17 | - PRIMARY KEY ("id") | ||
| 18 | -) COMMENT '支付商户信息'; | ||
| 19 | - | ||
| 20 | --- bpm 开头的 DB | ||
| 21 | - | ||
| 22 | -CREATE TABLE IF NOT EXISTS "pay_app" ( | ||
| 23 | - "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, | ||
| 24 | - "name" varchar(64) NOT NULL, | ||
| 25 | - "status" tinyint NOT NULL, | ||
| 26 | - "remark" varchar(255) DEFAULT NULL, | ||
| 27 | - `pay_notify_url` varchar(1024) NOT NULL, | ||
| 28 | - `refund_notify_url` varchar(1024) NOT NULL, | ||
| 29 | - `merchant_id` bigint(20) NOT NULL, | ||
| 30 | - "creator" varchar(64) DEFAULT '', | ||
| 31 | - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, | ||
| 32 | - "updater" varchar(64) DEFAULT '', | ||
| 33 | - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | ||
| 34 | - "deleted" bit(1) NOT NULL DEFAULT FALSE, | ||
| 35 | - PRIMARY KEY ("id") | ||
| 36 | -) COMMENT = '支付应用信息'; | ||
| 37 | - | ||
| 38 | -CREATE TABLE IF NOT EXISTS "pay_channel" ( | ||
| 39 | - "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, | ||
| 40 | - "code" varchar(32) NOT NULL, | ||
| 41 | - "status" tinyint(4) NOT NULL, | ||
| 42 | - "remark" varchar(255) DEFAULT NULL, | ||
| 43 | - "fee_rate" double NOT NULL DEFAULT 0, | ||
| 44 | - "merchant_id" bigint(20) NOT NULL, | ||
| 45 | - "app_id" bigint(20) NOT NULL, | ||
| 46 | - "config" varchar(10240) NOT NULL, | ||
| 47 | - "creator" varchar(64) NULL DEFAULT '', | ||
| 48 | - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, | ||
| 49 | - "updater" varchar(64) NULL DEFAULT '', | ||
| 50 | - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | ||
| 51 | - "deleted" bit(1) NOT NULL DEFAULT FALSE, | ||
| 52 | - PRIMARY KEY ("id") | ||
| 53 | -) COMMENT = '支付渠道'; | ||
| 54 | - | ||
| 55 | -CREATE TABLE IF NOT EXISTS `pay_order` ( | ||
| 56 | - "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, | ||
| 57 | - `merchant_id` bigint(20) NOT NULL, | ||
| 58 | - `app_id` bigint(20) NOT NULL, | ||
| 59 | - `channel_id` bigint(20) DEFAULT NULL, | ||
| 60 | - `channel_code` varchar(32) DEFAULT NULL, | ||
| 61 | - `merchant_order_id` varchar(64) NOT NULL, | ||
| 62 | - `subject` varchar(32) NOT NULL, | ||
| 63 | - `body` varchar(128) NOT NULL, | ||
| 64 | - `notify_url` varchar(1024) NOT NULL, | ||
| 65 | - `notify_status` tinyint(4) NOT NULL, | ||
| 66 | - `amount` bigint(20) NOT NULL, | ||
| 67 | - `channel_fee_rate` double DEFAULT 0, | ||
| 68 | - `channel_fee_amount` bigint(20) DEFAULT 0, | ||
| 69 | - `status` tinyint(4) NOT NULL, | ||
| 70 | - `user_ip` varchar(50) NOT NULL, | ||
| 71 | - `expire_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP, | ||
| 72 | - `success_time` datetime(0) DEFAULT CURRENT_TIMESTAMP, | ||
| 73 | - `notify_time` datetime(0) DEFAULT CURRENT_TIMESTAMP, | ||
| 74 | - `success_extension_id` bigint(20) DEFAULT NULL COMMENT '支付成功的订单拓展单编号', | ||
| 75 | - `refund_status` tinyint(4) NOT NULL, | ||
| 76 | - `refund_times` tinyint(4) NOT NULL, | ||
| 77 | - `refund_amount` bigint(20) NOT NULL, | ||
| 78 | - `channel_user_id` varchar(255) DEFAULT NULL, | ||
| 79 | - `channel_order_no` varchar(64) DEFAULT NULL, | ||
| 80 | - `creator` varchar(64) DEFAULT '', | ||
| 81 | - `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP, | ||
| 82 | - `updater` varchar(64) DEFAULT '', | ||
| 83 | - `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | ||
| 84 | - `deleted` bit(1) NOT NULL DEFAULT FALSE, | ||
| 85 | - PRIMARY KEY ("id") | ||
| 86 | -) COMMENT = '支付订单'; | ||
| 87 | - | ||
| 88 | -CREATE TABLE IF NOT EXISTS `pay_refund` ( | ||
| 89 | - "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY, | ||
| 90 | - `merchant_id` bigint(20) NOT NULL, | ||
| 91 | - `app_id` bigint(20) NOT NULL, | ||
| 92 | - `channel_id` bigint(20) NOT NULL, | ||
| 93 | - `channel_code` varchar(32) NOT NULL, | ||
| 94 | - `order_id` bigint(20) NOT NULL, | ||
| 95 | - `trade_no` varchar(64) NOT NULL, | ||
| 96 | - `merchant_order_id` varchar(64) NOT NULL, | ||
| 97 | - `merchant_refund_no` varchar(64) NOT NULL, | ||
| 98 | - `notify_url` varchar(1024) NOT NULL, | ||
| 99 | - `notify_status` tinyint(4) NOT NULL, | ||
| 100 | - `status` tinyint(4) NOT NULL, | ||
| 101 | - `type` tinyint(4) NOT NULL, | ||
| 102 | - `pay_amount` bigint(20) NOT NULL, | ||
| 103 | - `refund_amount` bigint(20) NOT NULL, | ||
| 104 | - `reason` varchar(256) NOT NULL, | ||
| 105 | - `user_ip` varchar(50) NULL DEFAULT NULL, | ||
| 106 | - `channel_order_no` varchar(64) NOT NULL, | ||
| 107 | - `channel_refund_no` varchar(64) NULL DEFAULT NULL, | ||
| 108 | - `channel_error_code` varchar(128) NULL DEFAULT NULL, | ||
| 109 | - `channel_error_msg` varchar(256) NULL DEFAULT NULL, | ||
| 110 | - `channel_extras` varchar(1024) NULL DEFAULT NULL, | ||
| 111 | - `expire_time` datetime(0) NULL DEFAULT NULL, | ||
| 112 | - `success_time` datetime(0) NULL DEFAULT NULL, | ||
| 113 | - `notify_time` datetime(0) NULL DEFAULT NULL, | ||
| 114 | - `creator` varchar(64) NULL DEFAULT '', | ||
| 115 | - `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP, | ||
| 116 | - `updater` varchar(64) NULL DEFAULT '', | ||
| 117 | - `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | ||
| 118 | - `deleted` bit(1) NOT NULL DEFAULT FALSE, | ||
| 119 | - PRIMARY KEY ("id") | ||
| 120 | -) COMMENT = '退款订单'; | ||
| 121 | - | ||
| 122 | --- bpm 开头的 DB | ||
| 123 | - | ||
| 124 | -CREATE TABLE IF NOT EXISTS "bpm_form" ( | ||
| 125 | - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, | ||
| 126 | - "name" varchar(63) NOT NULL, | ||
| 127 | - "status" tinyint NOT NULL, | ||
| 128 | - "fields" varchar(255) NOT NULL, | ||
| 129 | - "conf" varchar(255) NOT NULL, | ||
| 130 | - "remark" varchar(255), | ||
| 131 | - "creator" varchar(64) DEFAULT '', | ||
| 132 | - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | ||
| 133 | - "updater" varchar(64) DEFAULT '', | ||
| 134 | - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | ||
| 135 | - "deleted" bit NOT NULL DEFAULT FALSE, | ||
| 136 | - PRIMARY KEY ("id") | ||
| 137 | -) COMMENT '动态表单'; | ||
| 138 | - | ||
| 139 | -CREATE TABLE IF NOT EXISTS "bpm_user_group" ( | ||
| 140 | - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, | ||
| 141 | - "name" varchar(63) NOT NULL, | ||
| 142 | - "description" varchar(255) NOT NULL, | ||
| 143 | - "status" tinyint NOT NULL, | ||
| 144 | - "member_user_ids" varchar(255) NOT NULL, | ||
| 145 | - "creator" varchar(64) DEFAULT '', | ||
| 146 | - "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | ||
| 147 | - "updater" varchar(64) DEFAULT '', | ||
| 148 | - "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | ||
| 149 | - "deleted" bit NOT NULL DEFAULT FALSE, | ||
| 150 | - PRIMARY KEY ("id") | ||
| 151 | - ) COMMENT '用户组'; |
更新日志.md
| @@ -24,7 +24,7 @@ | @@ -24,7 +24,7 @@ | ||
| 24 | 24 | ||
| 25 | *【重构】大模块按照多 Maven Module 的方式拆分,提升可维护性,为后续重构 onemall 提供基础 | 25 | *【重构】大模块按照多 Maven Module 的方式拆分,提升可维护性,为后续重构 onemall 提供基础 |
| 26 | *【新增】Spring Security 支持读取多种用户类型,从不同的数据库表,从而实现单项目提供管理后台、用户 APP 的不同 RESTful API 接口 | 26 | *【新增】Spring Security 支持读取多种用户类型,从不同的数据库表,从而实现单项目提供管理后台、用户 APP 的不同 RESTful API 接口 |
| 27 | -*【新增】代码生成器支持多 Maven Module 的方式生成代码,支持管理后台、用户 APP 两种场景的 RESTful API 的生成 | 27 | +*【新增】代码生成器支持多 Maven Module 的方式生成代码,支持管理后台、用户 APP 两种场景的 RESTful API 的生成,支持 H2 测试数据库的生成 |
| 28 | *【重构】将数据库文档调整到 tool 模块,更加明确 | 28 | *【重构】将数据库文档调整到 tool 模块,更加明确 |
| 29 | 29 | ||
| 30 | ### 🐞 Bug Fixes | 30 | ### 🐞 Bug Fixes |