构建可持续交付的SaaS平台(4)——谷雨代码生成工具:3分钟搞定规范CRUD,AI时代的合规利器
谷雨开源SaaS平台推出企业级代码生成工具,解决AI生成代码与现有系统不兼容的痛点。该工具通过标准化项目骨架模板和全栈代码生成插件,能在3分钟内生成符合企业规范的CRUD功能代码,包含数据层、业务层和接口层等12类文件。支持命令行和IDEA两种创建方式,提供一站式集成工具g2rain-crafter实现交互式生成。相比普通AI工具,其优势在于架构合规性高、代码简洁无冗余、团队协作友好且完全开源可控
在AI编程遍地开花的今天,“几分钟生成代码”早已不是新鲜事。但用过的开发者都懂一个痛点:AI生成的代码往往天马行空,和现有系统的架构规范、代码风格、包结构格格不入,后续整合调试的时间可能比从零开发还久。
而谷雨开源SaaS平台(g2rain)推出的代码生成工具,正是为解决这个核心矛盾而来——不仅能3分钟生成完整的CRUD功能,更能严格遵循企业级SaaS的架构规范,生成可直接集成的标准化代码。话不多说,直接上实操教程!
一、代码生成功能实操(Windows系统示例)
1. 两种创建项目方式,按需选择
方式1:CMD命令行快速创建(推荐)
无需复杂配置,一行命令即可生成标准化项目骨架。
- 打开CMD命令行(注意:不推荐Windows自带PowerShell),切换到目标目录(如
D:\codes\g2rain-test); - 执行Maven命令,替换
groupId、artifactId、package为实际项目信息:
mvn archetype:generate ^
-DarchetypeGroupId=com.g2rain ^
-DarchetypeArtifactId=g2rain-generator-archetype ^
-DarchetypeVersion=1.0.2 ^
-DgroupId=com.g2rain ^
-DartifactId=g2rain-demo ^
-Dversion=1.0.0 ^
-Dpackage=com.g2rain.demo ^
-DinteractiveMode=false
- 等待命令执行完成,自动生成多模块项目结构:
g2rain-demo/
├── g2rain-demo-api/ # 对外API层
│ └── src/main/java/com/g2rain/demo/
│ ├── api/ # API接口(${Entity}Api)
│ ├── dto/ # 数据传输对象(查询/新增/修改DTO)
│ └── vo/ # 视图返回对象(${Entity}Vo)
├── g2rain-demo-biz/ # 核心业务层
│ └── src/main/java/com.g2rain.demo/
│ ├── controller/ # 控制器(${Entity}Controller)
│ ├── service/ # 业务接口(${Entity}Service)
│ │ └── impl/ # 业务实现类
│ ├── dao/ # DAO接口(${Entity}Dao)
│ │ └── po/ # 持久化对象(${Entity}Po)
│ └── converter/ # PO/DTO/VO对象转换器
├── g2rain-demo-startup/ # 项目启动层
│ └── src/main/resources/
│ └── mybatis/mapper/ # MyBatis Mapper XML文件
├── pom.xml # 父工程依赖管理
└── codegen.properties # 代码生成配置文件

方式2:IDEA可视化创建(适合习惯IDE操作的开发者)
- 打开IDEA,选择「新建项目」→「Maven Archetype」;
- 点击「添加Archetype」,输入坐标信息:
-
- 组ID:
com.g2rain - 工件ID:
g2rain-generator-archetype - 版本:
1.0.2
- 组ID:

- 填写项目名称(如
g2rain-demo2)、存储位置,选择JDK 21(前置要求:Java 21+、Maven 3.6+);

- 点击「创建」,自动生成与命令行方式一致的项目结构。

2. 3步生成完整CRUD代码
准备工作:在Mysql数据库中创建表
CREATE TABLE `test` (
`id` bigint NOT NULL COMMENT '主键ID',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`version` int DEFAULT '0' COMMENT '版本号',
`type` varchar(32) NOT NULL COMMENT '类型',
`name` varchar(32) NOT NULL COMMENT '名称',
`code` varchar(64) DEFAULT NULL COMMENT '编码',
`parent_dict_id` varchar(32) DEFAULT NULL COMMENT '父主键ID',
`page_code` varchar(64) DEFAULT NULL COMMENT '页面编码',
`delete_flag` tinyint(1) DEFAULT '0' COMMENT '删除标志位',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
步骤1:配置代码生成规则
打开项目根目录的codegen.properties文件,填写核心配置(必填项已标注):
# 基础配置(必填)
project.basePackage=com.g2rain.demo # Java基础包名
database.url=jdbc:mysql://localhost:3306/my_database?useSSL=false&serverTimezone=UTC # 数据库连接URL
database.driver=com.mysql.cj.jdbc.Driver # JDBC驱动类
database.username=root # 数据库用户名
database.password=your_password # 数据库密码(可选)
database.tables=user,order_info,product # 要生成代码的表名(多个用逗号分隔)
# 可选配置
tables.overwrite=true # 是否覆盖已有文件(默认false)
步骤2:执行生成命令
- 回到CMD命令行,切换到项目根目录(如
D:\codes\g2rain-test\g2rain-demo); - 执行生成命令(若已配置
settings.xml的pluginGroup,可直接用简写mvn g2rain:generate):
mvn com.g2rain:g2rain-generator-maven-plugin:1.0.1:generate
- 等待命令执行完成,控制台输出「BUILD SUCCESS」即表示生成成功。

步骤3:运行项目并测试
- 打开
g2rain-demo-startup模块的启动类(Application.java);

- 配置数据库连接信息(已在
application-dev.yml中自动生成,可按需修改); - 启动Spring Boot项目,通过Postman访问接口测试:

所有接口均遵循RESTful规范,无需手动编写任何控制层、服务层代码,直接对接前端即可使用!
二、谷雨代码生成工具核心组件解析
谷雨代码生成工具并非单一插件,而是由「项目骨架模板」+「代码生成插件」+「一站式工具」组成的完整解决方案,完全开源可定制。
1. g2rain-generator-archetype:标准化项目骨架模板
- 核心作用:定义企业级SaaS的模块结构,避免团队开发的“架构混乱”;
- 开源地址:Github仓库;
- 关键命令:
# 清除生成信息
mvn clean
# 根据当前项目重新生成项目模版
mvn archetype:create-from-project
# 进入archetype目录
cd target/generated-sources/archetype
# 安装archetype到本地Maven仓库
mvn install
- 核心优势:内置SaaS平台必备的多模块结构,统一的接口入参出参格式、封装的工具类,公用功能starter等,无需手动搭建架构。
2. g2rain-generator-maven-plugin:全栈代码生成插件
基于MyBatis Generator和FreeMarker开发,是工具的核心引擎:
- 开源地址:Github仓库;
- 支持生成范围:从数据库表结构到前端可调用的API,一次性生成12类文件:
-
- 数据层:PO(持久化对象)、DAO接口、MyBatis Mapper XML;
- 业务层:Service接口、ServiceImpl实现类、对象转换器(PO/DTO/VO);
- 接口层:API接口、DTO(查询/新增/修改)、VO(返回视图);
- 配置层:Spring Boot配置文件(application.yml/dev.yml);
- 高度可定制:所有生成逻辑基于FreeMarker模板,可直接修改
src/main/resources/templates/下的模板文件(如po.ftl、controller.ftl),适配团队自定义规范。 - codegen.properties的配置解析
|
键名 |
说明 |
示例 |
|
|
Java 基础包名(必填) |
|
|
|
数据库连接 URL(必填) |
|
|
|
JDBC 驱动类(必填) |
|
|
|
数据库用户名(必填) |
|
|
|
数据库密码(可选) |
|
|
|
要生成代码的表名(必填) |
|
|
|
是否覆盖已有文件(可选) |
/ |
- 常用命令
# 使用默认配置文件名 codegen.properties
mvn com.g2rain:g2rain-generator-maven-plugin:1.0.1:generate
# 使用默认配置文件名 codegen.properties,生成指定的表的接口
mvn com.g2rain:g2rain-generator-maven-plugin:1.0.1:generate -Dtable.name=表名
# 或者使用自定义配置文件路径
mvn com.g2rain:g2rain-generator-maven-plugin:1.0.1:generate \
-Dconfig.file=/path/to/your-codegen.properties
3. g2rain-crafter:一站式集成工具
整合了前两者的核心能力,提供更便捷的使用体验:
- 开源地址:Github仓库;
- 核心功能:
-
- 交互式生成:通过命令行问答,无需手动编写
codegen.properties; - 一站式生成:一键完成“项目创建+代码生成+配置初始化”;
- 模板同步:支持团队共享自定义模板,确保所有项目规范统一。
- 交互式生成:通过命令行问答,无需手动编写
- 使用示例
# 项目无需安装插件, 直接运行即可
mvn com.g2rain:g2rain-crafter:1.0.2:bootstrap
D:\codes\g2rain-test>mvn com.g2rain:g2rain-crafter:1.0.2:bootstrap
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------< org.apache.maven:standalone-pom >-------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] --- g2rain:1.0.2:bootstrap (default-cli) @ standalone-pom ---
[INFO] =========================================
[INFO] G2Rain Crafter - Starting execution
[INFO] =========================================
[INFO] Execution plan:
[INFO] - Generate skeleton: true
[INFO] - Generate foundry: true
Group ID [required]: com.g2rain
Artifact ID [required]: g2rain-demo3
Version [optional, default 1.0.0]:
Base Package [required]: com.g2rain.demo
Description [optional]:
Database URL [required]: jdbc:mysql://localhost:3306/g2rain?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
Driver Class [required]: com.mysql.cj.jdbc.Driver
Username [required]: root
Password [optional]: *******
Table Names [required]: test
Overwrite existing files? (y/N, default N): N
[INFO] ====== Project Skeleton Configuration =====
[INFO] Group ID : com.g2rain
[INFO] Artifact ID : g2rain-demo3
[INFO] Version : 1.0.0
[INFO] Base Package : com.g2rain.demo
[INFO] Description :
[INFO] =========================================
[INFO]
[INFO] ====== Code Generation Configuration =====
[INFO] Database URL : jdbc:mysql://localhost:3306/g2rain?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
[INFO] Driver Class : com.mysql.cj.jdbc.Driver
[INFO] Database User : root
[INFO] Table Names : test
[INFO] Overwrite Files: false
[INFO] =========================================
[INFO]
[INFO] >>> Starting skeleton generation...
[INFO] Generated file: D:\codes\g2rain-test\g2rain-demo3\pom.xml
[INFO] Generated file: D:\codes\g2rain-test\g2rain-demo3\g2rain-demo3-startup\pom.xml
[INFO] Generated file: D:\codes\g2rain-test\g2rain-demo3\g2rain-demo3-startup\src\main\java\com\g2rain\demo\Application.java
[INFO] Generated file: D:\codes\g2rain-test\g2rain-demo3\g2rain-demo3-startup\src\main\java\com\g2rain\demo\config\VirtualThreadConfigurer.java
[INFO] Generated file: D:\codes\g2rain-test\g2rain-demo3\g2rain-demo3-api\pom.xml
[INFO] Generated file: D:\codes\g2rain-test\g2rain-demo3\g2rain-demo3-biz\pom.xml
[INFO] >>> Skeleton generation completed.
[INFO] >>> Starting foundry generation...
[INFO] Generated file: D:\codes\g2rain-test\g2rain-demo3\g2rain-demo3-api\src\main\java\com\g2rain\demo\api\TestApi.java
[INFO] Generated file: D:\codes\g2rain-test\g2rain-demo3\g2rain-demo3-api\src\main\java\com\g2rain\demo\dto\TestSelectDto.java
[INFO] Generated file: D:\codes\g2rain-test\g2rain-demo3\g2rain-demo3-api\src\main\java\com\g2rain\demo\vo\TestVo.java
[INFO] Generated file: D:\codes\g2rain-test\g2rain-demo3\g2rain-demo3-biz\src\main\java\com\g2rain\demo\dto\TestDto.java
[INFO] Generated file: D:\codes\g2rain-test\g2rain-demo3\g2rain-demo3-biz\src\main\java\com\g2rain\demo\dao\TestDao.java
[INFO] Generated file: D:\codes\g2rain-test\g2rain-demo3\g2rain-demo3-biz\src\main\java\com\g2rain\demo\dao\po\TestPo.java
[INFO] Generated file: D:\codes\g2rain-test\g2rain-demo3\g2rain-demo3-biz\src\main\java\com\g2rain\demo\service\TestService.java
[INFO] Generated file: D:\codes\g2rain-test\g2rain-demo3\g2rain-demo3-biz\src\main\java\com\g2rain\demo\service\impl\TestServiceImpl.java
[INFO] Generated file: D:\codes\g2rain-test\g2rain-demo3\g2rain-demo3-biz\src\main\java\com\g2rain\demo\controller\TestController.java
[INFO] Generated file: D:\codes\g2rain-test\g2rain-demo3\g2rain-demo3-biz\src\main\java\com\g2rain\demo\converter\TestConverter.java
[INFO] Generated file: D:\codes\g2rain-test\g2rain-demo3\g2rain-demo3-biz\src\main\resources\mybatis\mapper\TestMapper.xml
[INFO] Generated file: D:\codes\g2rain-test\g2rain-demo3\g2rain-demo3-startup\src\main\resources\application.yml
[INFO] Generated file: D:\codes\g2rain-test\g2rain-demo3\g2rain-demo3-startup\src\main\resources\application-dev.yml
[INFO] tableInfo:TableInfo(tableName=test, tableComment=, entityName=Test, entityNameLower=test, columns=[ColumnInfo(columnName=type, columnType=VARCHAR, columnComment=类型, propertyName=type, javaType=String, primaryKey=false, autoIncrement=false), ColumnInfo(columnName=name, columnType=VARCHAR, columnComment=名称, propertyName=name, javaType=String, primaryKey=false, autoIncrement=false), ColumnInfo(columnName=code, columnType=VARCHAR, columnComment=编码, propertyName=code, javaType=String, primaryKey=false, autoIncrement=false), ColumnInfo(columnName=parent_dict_id, columnType=VARCHAR, columnComment=父主键ID, propertyName=parentDictId, javaType=String, primaryKey=false, autoIncrement=false), ColumnInfo(columnName=page_code, columnType=VARCHAR, columnComment=页面编码, propertyName=pageCode, javaType=String, primaryKey=false, autoIncrement=false)], primaryKey=ColumnInfo(columnName=id, columnType=BIGINT, columnComment=主键ID, propertyName=id, javaType=Long, primaryKey=true, autoIncrement=false), baseColumns=[ColumnInfo(columnName=update_time, columnType=TIMESTAMP, columnComment=更新时间, propertyName=updateTime, javaType=LocalDateTime, primaryKey=false, autoIncrement=false), ColumnInfo(columnName=create_time, columnType=TIMESTAMP, columnComment=创建时间, propertyName=createTime, javaType=LocalDateTime, primaryKey=false, autoIncrement=false)], deleteFlagColumn=ColumnInfo(columnName=delete_flag, columnType=BIT, columnComment=删除标志位, propertyName=deleteFlag, javaType=Boolean, primaryKey=false, autoIncrement=false), versionColumn=ColumnInfo(columnName=version, columnType=INTEGER, columnComment=版本号, propertyName=version, javaType=Integer, primaryKey=false, autoIncrement=false))
[INFO] >>> Foundry generation completed.
[INFO] =========================================
[INFO] G2Rain Crafter - Execution completed!
[INFO] =========================================
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:01 min
[INFO] Finished at: 2025-12-23T20:32:19+08:00
[INFO] ------------------------------------------------------------------------
D:\codes\g2rain-test>
- 通过命令直接一站式生成项目
mvn com.g2rain:g2rain-crafter:1.0.2:bootstrap ^
-Darchetype.groupId=com.g2rain ^
-Darchetype.artifactId=g2rain-demo3 ^
-Darchetype.version=1.0.0 ^
-Darchetype.package=com.g2rain.demo ^
-Darchetype.description="示例项目" ^
-Ddatabase.url="jdbc:mysql://localhost:3306/g2rain?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true" ^
-Ddatabase.driver=com.mysql.cj.jdbc.Driver ^
-Ddatabase.username=root ^
-Ddatabase.password=root ^
-Ddatabase.tables=test ^
-Dtables.overwrite=false
- 项目结构模版

三、AI时代,谷雨开源SaaS平台代码生成工具的核心优势
在AI编程工具普及的今天,谷雨开源SaaS平台代码生成工具的核心竞争力不在于“生成代码”,而在于“生成符合规范、可直接集成的企业级代码”:
- 架构合规性:严格遵循SaaS平台的多模块架构,生成的代码可直接融入谷雨开源SaaS生态(支持认证授权、微前端、统一管理后台);
- 无“垃圾代码”:AI生成的代码常包含冗余逻辑,谷雨工具基于模板生成,代码简洁、结构清晰,维护成本低;
- 团队协作友好:统一的模板确保所有开发者的代码风格、包结构一致,新人上手成本降低80%;
- 完全开源可控:无供应商锁定,可根据业务需求修改模板、扩展生成逻辑,适配特殊场景(如多租户数据隔离、分库分表)。
四、最后说两句
对于企业级SaaS开发而言,可持续交付是核心竞争力。谷雨开源SaaS平台代码生成工具的目标,是让开发者从重复的CRUD工作中解放出来,专注于核心业务逻辑的创新,同时保证系统架构的一致性和可维护性。
目前工具已完全开源,欢迎各位开发者Star、Fork、PR,一起共建更强大的SaaS开发生态!
如果在使用过程中有任何问题,欢迎在私信或者留言交流交流~
更多推荐


所有评论(0)