scaffold-codegen 代码生成器模块
概述
代码生成器模块,通过读取数据库表元数据,自动生成符合 Scaffold v2 四层架构规范的 Java 代码、前端 API 文件和菜单 SQL。
功能
- 读取 MySQL 数据库表和列的元数据(通过
information_schema) - 使用 FreeMarker 模板引擎生成代码
- 支持代码预览(不写入文件)和代码下载(ZIP 打包)
- 记录代码生成历史
生成的文件
| 文件 | 说明 |
|---|---|
{Entity}.java |
实体类,继承 BaseEntity |
{Entity}Mapper.java |
MyBatis-Plus Mapper 接口 |
{Entity}Repository.java |
Repository 层,继承 ServiceImpl |
{Entity}Service.java |
Service 接口 |
{Entity}ServiceImpl.java |
Service 实现 |
{Entity}Controller.java |
REST 控制器,POST 风格 API |
{Entity}CreateDTO.java |
创建 DTO |
{Entity}UpdateDTO.java |
更新 DTO |
{Entity}QueryDTO.java |
分页查询 DTO |
{Entity}VO.java |
视图对象 |
api.ts |
前端 API 调用文件 |
menu.sql |
菜单权限 SQL |
API 接口
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /v1/codegen/tables |
获取数据库表列表 |
| GET | /v1/codegen/table/{tableName}/columns |
获取表列元数据 |
| POST | /v1/codegen/preview |
预览生成的代码 |
| POST | /v1/codegen/execute |
执行代码生成(下载 ZIP) |
| POST | /v1/codegen/history/page |
分页查询生成历史 |
配置
scaffold:
codegen:
enabled: true # 是否启用模块
base-package: com.scaffold # 生成代码的基础包名
schema-name: scaffold # 数据库 Schema 名称
使用流程
- 调用
GET /v1/codegen/tables获取数据库表列表 - 调用
GET /v1/codegen/table/{tableName}/columns查看表的列信息 - 调用
POST /v1/codegen/preview预览将要生成的代码 - 调用
POST /v1/codegen/execute下载生成的 ZIP 文件 - 将 ZIP 中的文件解压到对应模块目录
四层架构
生成的代码严格遵循 Controller -> Service -> Repository -> Mapper 四层架构:
- Controller:
@RestController,所有写操作使用 POST 方法,返回Result<T> - Service: 业务逻辑层,注入 Repository(不直接注入 Mapper)
- Repository: 继承
ServiceImpl<Mapper, Entity>,提供数据访问 - Mapper: 继承
BaseMapper<Entity>,MyBatis-Plus ORM 接口
数据库表
模块自身的表:
CREATE TABLE t_codegen_history (
id BIGINT NOT NULL COMMENT '主键ID',
table_name VARCHAR(200) NOT NULL COMMENT '表名',
module_name VARCHAR(100) NOT NULL COMMENT '模块名称',
package_name VARCHAR(200) NOT NULL COMMENT '包名',
entity_name VARCHAR(100) NOT NULL COMMENT '实体类名',
options_json TEXT NULL COMMENT '生成选项JSON',
file_count INT NOT NULL DEFAULT 0 COMMENT '生成文件数量',
status TINYINT NOT NULL DEFAULT 0 COMMENT '状态:0-成功,1-失败',
create_by BIGINT NULL COMMENT '创建人ID',
create_time DATETIME NULL COMMENT '创建时间',
update_by BIGINT NULL COMMENT '更新人ID',
update_time DATETIME NULL COMMENT '更新时间',
deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除标记',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='代码生成历史';