在AI编程遍地开花的今天,“几分钟生成代码”早已不是新鲜事。但用过的开发者都懂一个痛点:AI生成的代码往往天马行空,和现有系统的架构规范、代码风格、包结构格格不入,后续整合调试的时间可能比从零开发还久。

而谷雨开源SaaS平台(g2rain)推出的代码生成工具,正是为解决这个核心矛盾而来——不仅能3分钟生成完整的CRUD功能,更能严格遵循企业级SaaS的架构规范,生成可直接集成的标准化代码。话不多说,直接上实操教程!

一、代码生成功能实操(Windows系统示例)

1. 两种创建项目方式,按需选择

方式1:CMD命令行快速创建(推荐)

无需复杂配置,一行命令即可生成标准化项目骨架。

  1. 打开CMD命令行(注意:不推荐Windows自带PowerShell),切换到目标目录(如D:\codes\g2rain-test);
  2. 执行Maven命令,替换groupIdartifactIdpackage为实际项目信息:
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
  1. 等待命令执行完成,自动生成多模块项目结构:
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操作的开发者)

  1. 打开IDEA,选择「新建项目」→「Maven Archetype」;
  2. 点击「添加Archetype」,输入坐标信息:
    • 组ID:com.g2rain
    • 工件ID:g2rain-generator-archetype
    • 版本:1.0.2

 

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

 

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

 

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:执行生成命令

  1. 回到CMD命令行,切换到项目根目录(如D:\codes\g2rain-test\g2rain-demo);
  2. 执行生成命令(若已配置settings.xmlpluginGroup,可直接用简写mvn g2rain:generate):
mvn com.g2rain:g2rain-generator-maven-plugin:1.0.1:generate
  1. 等待命令执行完成,控制台输出「BUILD SUCCESS」即表示生成成功。

 

步骤3:运行项目并测试

  1. 打开g2rain-demo-startup模块的启动类(Application.java);

 

  1. 配置数据库连接信息(已在application-dev.yml中自动生成,可按需修改);
  2. 启动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.ftlcontroller.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.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:一站式集成工具

整合了前两者的核心能力,提供更便捷的使用体验:

    • 交互式生成:通过命令行问答,无需手动编写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平台代码生成工具的核心竞争力不在于“生成代码”,而在于“生成符合规范、可直接集成的企业级代码”:

  1. 架构合规性:严格遵循SaaS平台的多模块架构,生成的代码可直接融入谷雨开源SaaS生态(支持认证授权、微前端、统一管理后台);
  2. 无“垃圾代码”:AI生成的代码常包含冗余逻辑,谷雨工具基于模板生成,代码简洁、结构清晰,维护成本低;
  3. 团队协作友好:统一的模板确保所有开发者的代码风格、包结构一致,新人上手成本降低80%;
  4. 完全开源可控:无供应商锁定,可根据业务需求修改模板、扩展生成逻辑,适配特殊场景(如多租户数据隔离、分库分表)。

四、最后说两句

对于企业级SaaS开发而言,可持续交付是核心竞争力。谷雨开源SaaS平台代码生成工具的目标,是让开发者从重复的CRUD工作中解放出来,专注于核心业务逻辑的创新,同时保证系统架构的一致性和可维护性。

目前工具已完全开源,欢迎各位开发者Star、Fork、PR,一起共建更强大的SaaS开发生态!

如果在使用过程中有任何问题,欢迎在私信或者留言交流交流~

 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐