在AI编程遍地开花的今天,“几分钟生成代码”早已不是新鲜事。但用过的开发者都懂一个痛点:AI生成的代码往往天马行空,和现有系统的架构规范、代码风格、包结构格格不入,后续整合调试的时间可能比从零开发还久。
而谷雨开源SaaS平台(g2rain)推出的代码生成工具,正是为解决这个核心矛盾而来——不仅能3分钟生成完整的CRUD功能,更能严格遵循企业级SaaS的架构规范,生成可直接集成的标准化代码。话不多说,直接上实操教程!
无需复杂配置,一行命令即可生成标准化项目骨架。
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 # 代码生成配置文件
![]()
![]()
![]()
![]()
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;
打开项目根目录的 codegen.properties 文件,填写核心配置(必填项已标注):
# 基础配置(必填)project.basePackage=com.g2rain.demo # Java基础包名database.url=jdbc:mysql://localhost:3306/my_database?useSSL=false&serverTimezone=UTC # 数据库连接URLdatabase.driver=com.mysql.cj.jdbc.Driver # JDBC驱动类database.username=root # 数据库用户名database.password=your_password # 数据库密码(可选)database.tables=user,order_info,product # 要生成代码的表名(多个用逗号分隔) # 可选配置tables.overwrite=true # 是否覆盖已有文件(默认false)
mvn com.g2rain:g2rain-generator-maven-plugin:1.0.1:generate
![]()
![]()
![]()
所有接口均遵循RESTful规范,无需手动编写任何控制层、服务层代码,直接对接前端即可使用!
谷雨代码生成工具并非单一插件,而是由「项目骨架模板」+「代码生成插件」+「一站式工具」组成的完整解决方案,完全开源可定制。
# 清除生成信息mvn clean # 根据当前项目重新生成项目模版mvn archetype:create-from-project# 进入archetype目录cd target/generated-sources/archetype # 安装archetype到本地Maven仓库mvn install
基于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的配置解析
| 键名 | 说明 | 示例 |
|---|---|---|
| project.basePackage | Java 基础包名(必填) | com.example.demo |
| database.url | 数据库连接 URL(必填) | jdbc:mysql://localhost:3306/my_database?useSSL=false... |
| database.driver | JDBC 驱动类(必填) | com.mysql.cj.jdbc.Driver |
| database.username | 数据库用户名(必填) | root |
| database.password | 数据库密码(可选) | your_password |
| database.tables | 要生成代码的表名(必填) | user,order_info,product |
| tables.overwrite | 是否覆盖已有文件(可选) | true |
/ false |
# 使用默认配置文件名 codegen.propertiesmvn 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
整合了前两者的核心能力,提供更便捷的使用体验:
开源地址 : 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: trueGroup ID [required]: com.g2rainArtifact ID [required]: g2rain-demo3Version [optional, default 1.0.0]:Base Package [required]: com.g2rain.demoDescription [optional]:Database URL [required]: jdbc:mysql://localhost:3306/g2rain?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=trueDriver Class [required]: com.mysql.cj.jdbc.DriverUsername [required]: rootPassword [optional]: *******Table Names [required]: testOverwrite 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平台代码生成工具的核心竞争力不在于“生成代码”,而在于“生成符合规范、可直接集成的企业级代码”:
对于企业级SaaS开发而言,可持续交付是核心竞争力。谷雨开源SaaS平台代码生成工具的目标,是让开发者从重复的CRUD工作中解放出来,专注于核心业务逻辑的创新,同时保证系统架构的一致性和可维护性。
目前工具已完全开源,欢迎各位开发者Star、Fork、PR,一起共建更强大的SaaS开发生态!