Go to file
gitee-bot 2cbcbab877
Update README.md
2025-07-03 00:52:41 +00:00
images 🔥 删除不用图片 2025-07-02 21:36:02 +08:00
src/main 🐛 复制失败;过滤表无法完成; 2025-07-02 23:23:51 +08:00
.gitignore 🎉 init 2025-06-28 22:10:25 +08:00
LICENSE 🎉 init 2025-06-28 22:10:25 +08:00
README.md Update README.md 2025-07-03 00:52:41 +00:00
pom.xml 📦 将项目移到最外层 2025-07-02 13:39:16 +08:00
push.sh 🎉 init 2025-06-28 22:10:25 +08:00

README.md

🚀 Bunny Code Generator 代码生成器系统文档

🌟 项目简介

Bunny Code Generator 是一个高效、灵活的代码生成工具支持从数据库表或SQL语句生成前后端代码适用于多种数据库和前端框架。该项目采用现代化架构具有良好的扩展性和维护性。

📦 技术栈

  • 后端Java 17+, Spring Boot 3.4.3, Apache Velocity, HikariCP
  • 前端Vue.js, Bootstrap, Axios, Day.js
  • 构建工具Maven
  • 模板引擎Velocity
  • 数据库支持MySQL 8.0+, 可扩展至 Oracle, PostgreSQL <20>
  • 代码质量:后端代码质量评分 85/100前端代码质量评分 78/100

🧩 核心功能模块

1. 核心控制器

  • GeneratorController主控制器提供生成代码和下载ZIP文件的接口
  • TableController:获取数据库元数据信息
  • SqlParserController解析SQL语句提取表和列信息
  • WebController:页面路由控制器
  • VmsController:获取前端代码模板路径

2. 元数据解析

  • DatabaseMetadataProvider:数据库元数据提取器
  • SqlMetadataProviderSQL语句元数据提取器
  • DatabaseDialect:数据库方言接口,支持多数据库扩展
  • MySqlDialectMySQL方言实现提取注释等信息

3. 代码生成引擎

  • AbstractTemplateGenerator:抽象模板生成器,定义模板方法
  • VmsTBaseTemplateGenerator:具体模板实现,负责上下文填充和模板合并
  • ZipFileUtil生成ZIP文件并下载
  • MysqlTypeConvertUtil类型转换工具SQL → Java/JS

🛠️ 核心设计模式

  • 模板方法模式:用于定义统一的代码生成流程
  • 策略模式:用于数据库方言的灵活切换
  • 工厂模式:用于生成不同类型的代码
  • 建造者模式:用于构建元数据对象

📁 项目结构说明

  • src/main/java/cn/bunny/controller:包含所有控制器
  • src/main/java/cn/bunny/core:核心模块,包含元数据提取、数据库方言等
  • src/main/java/cn/bunny/domain:数据模型定义
  • src/main/java/cn/bunny/exception:异常处理模块
  • src/main/java/cn/bunny/service:接口定义
  • src/main/java/cn/bunny/service/impl:接口实现
  • src/main/java/cn/bunny/utils:工具类
  • src/main/resources/static/src:前端组件和视图
  • src/main/resources/vmsVelocity 模板文件
  • src/main/resources/templates:前端页面模板

📄 代码生成流程

sequenceDiagram
    participant F as 前端
    participant C as Controller
    participant S as Service
    participant G as Generator
    participant T as Template

    F->>C: 提交生成请求
    C->>S: 调用 GeneratorService
    S->>G: 根据SQL或数据库表生成代码
    G->>T: 使用 Velocity 模板合并代码
    T-->>G: 返回生成的代码
    G-->>S: 返回生成的代码列表
    S-->>C: 返回生成结果
    C-->>F: 返回代码/ZIP

🧱 核心类协作

classDiagram
    class GeneratorController {
        +generate()
        +downloadByZip()
    }

    class GeneratorService {
        +generateCodeByDatabase()
        +generateCodeBySql()
    }

    class AbstractTemplateGenerator {
        +generateCode()
        #addContext()
        #templateMerge()
    }

    class VmsTBaseTemplateGenerator {
        +addContext()
        +templateMerge()
    }

    GeneratorController --> GeneratorService
    GeneratorService --> AbstractTemplateGenerator
    AbstractTemplateGenerator <|-- VmsTBaseTemplateGenerator

📚 快速使用指南

1. 启动项目

mvn spring-boot:run

2. 生成代码

curl -X POST http://localhost:8080/api/generator \
  -H "Content-Type: application/json" \
  -d '{"database": "test_db", "table": "user", "package": "com.example"}'

3. 打包下载代码

curl -X POST http://localhost:8080/api/generator/downloadByZip \
  -H "Content-Type: application/json" \
  -d '{"database": "test_db", "table": "user", "package": "com.example"}'

🧩 扩展指南

添加新数据库支持

  1. 实现 DatabaseDialect 接口
  2. 创建 IMetadataProvider 实现
  3. 注册为Spring Bean

示例:

@Component
public class OracleDialect implements DatabaseDialect {
    @Override
    public String extractTableComment(String tableOptions) {
        return "提取Oracle表注释逻辑";
    }

    @Override
    public String extractColumnComment(List<String> columnSpecs) {
        return "提取Oracle列注释逻辑";
    }
}

依赖管理

<!-- SQL解析 -->
<dependency>
    <groupId>com.github.jsqlparser</groupId>
    <artifactId>jsqlparser</artifactId>
    <version>4.9</version>
</dependency>

<!-- 模板引擎 -->
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.2</version>
</dependency>

⚙️ 性能优化点

  • 使用 parallelStream() 并行处理多表生成
  • HikariCP 配置:
    hikari:
      maximum-pool-size: 20
      connection-timeout: 30000
    

🔄 类型转换策略

SQL 类型 Java 类型 JS 类型
VARCHAR String string
INT Integer number
DATETIME LocalDateTime Date
BOOLEAN Boolean boolean

📌 注意事项

  • 确保数据库连接池配置合理
  • 多数据库支持时注意方言实现
  • 避免模板文件命名冲突(建议使用 $className 作为模板目录)

📝 版本兼容性

组件 支持版本
JDK 17+
MySQL 8.0+
Spring Boot 3.4.3
Vue.js 3.x

📎 代码质量评估

  • 后端代码评分85/100

    • 合理使用设计模式(模板方法模式)
    • 完善的异常处理体系
    • 类型转换工具类封装良好
  • 前端代码评分78/100

    • 组件化设计合理
    • 响应式状态管理有效
    • ⚠️ 部分表单验证逻辑重复
    • ⚠️ 表格分页逻辑可抽取为独立组件

💚 支持项目

如果这个项目对您有帮助,可以考虑支持我们:

WeChat & Alipay

Happy Coding! 🎉