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 名称

使用流程

  1. 调用 GET /v1/codegen/tables 获取数据库表列表
  2. 调用 GET /v1/codegen/table/{tableName}/columns 查看表的列信息
  3. 调用 POST /v1/codegen/preview 预览将要生成的代码
  4. 调用 POST /v1/codegen/execute 下载生成的 ZIP 文件
  5. 将 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='代码生成历史';