generator-code-server/README.md

210 lines
6.2 KiB
Markdown
Raw Normal View History

2025-06-28 22:10:25 +08:00
2025-07-02 21:10:23 +08:00
2025-07-03 08:52:41 +08:00
🚀 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`:数据库元数据提取器
- `SqlMetadataProvider`SQL语句元数据提取器
- `DatabaseDialect`:数据库方言接口,支持多数据库扩展
- `MySqlDialect`MySQL方言实现提取注释等信息
#### 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/vms`Velocity 模板文件
- `src/main/resources/templates`:前端页面模板
### 📄 代码生成流程
2025-07-02 21:10:23 +08:00
```mermaid
sequenceDiagram
participant F as 前端
participant C as Controller
participant S as Service
2025-07-03 08:52:41 +08:00
participant G as Generator
2025-07-02 21:10:23 +08:00
participant T as Template
2025-07-03 08:52:41 +08:00
F->>C: 提交生成请求
C->>S: 调用 GeneratorService
S->>G: 根据SQL或数据库表生成代码
G->>T: 使用 Velocity 模板合并代码
T-->>G: 返回生成的代码
G-->>S: 返回生成的代码列表
S-->>C: 返回生成结果
C-->>F: 返回代码/ZIP
2025-07-02 21:10:23 +08:00
```
2025-07-03 08:52:41 +08:00
### 🧱 核心类协作
2025-07-02 21:10:23 +08:00
```mermaid
classDiagram
class GeneratorController {
2025-07-03 08:52:41 +08:00
+generate()
2025-07-02 21:10:23 +08:00
+downloadByZip()
}
2025-07-03 08:52:41 +08:00
2025-07-02 21:10:23 +08:00
class GeneratorService {
+generateCodeByDatabase()
+generateCodeBySql()
}
2025-07-03 08:52:41 +08:00
2025-07-02 21:10:23 +08:00
class AbstractTemplateGenerator {
+generateCode()
#addContext()
#templateMerge()
}
2025-07-03 08:52:41 +08:00
2025-07-02 21:10:23 +08:00
class VmsTBaseTemplateGenerator {
+addContext()
+templateMerge()
}
2025-07-03 08:52:41 +08:00
2025-07-02 21:10:23 +08:00
GeneratorController --> GeneratorService
GeneratorService --> AbstractTemplateGenerator
AbstractTemplateGenerator <|-- VmsTBaseTemplateGenerator
```
2025-07-03 08:52:41 +08:00
### 📚 快速使用指南
2025-07-02 21:10:23 +08:00
2025-07-03 08:52:41 +08:00
#### 1. 启动项目
```bash
mvn spring-boot:run
```
2025-07-02 21:10:23 +08:00
2025-07-03 08:52:41 +08:00
#### 2. 生成代码
```bash
curl -X POST http://localhost:8080/api/generator \
-H "Content-Type: application/json" \
-d '{"database": "test_db", "table": "user", "package": "com.example"}'
```
2025-07-02 21:10:23 +08:00
2025-07-03 08:52:41 +08:00
#### 3. 打包下载代码
```bash
curl -X POST http://localhost:8080/api/generator/downloadByZip \
-H "Content-Type: application/json" \
-d '{"database": "test_db", "table": "user", "package": "com.example"}'
```
2025-07-02 21:10:23 +08:00
2025-07-03 08:52:41 +08:00
### 🧩 扩展指南
2025-07-02 21:10:23 +08:00
2025-07-03 08:52:41 +08:00
#### 添加新数据库支持
1. 实现 `DatabaseDialect` 接口
2. 创建 `IMetadataProvider` 实现
3. 注册为Spring Bean
2025-06-28 22:10:25 +08:00
2025-07-03 08:52:41 +08:00
示例:
```java
@Component
public class OracleDialect implements DatabaseDialect {
@Override
public String extractTableComment(String tableOptions) {
return "提取Oracle表注释逻辑";
}
2025-06-28 22:10:25 +08:00
2025-07-03 08:52:41 +08:00
@Override
public String extractColumnComment(List<String> columnSpecs) {
return "提取Oracle列注释逻辑";
}
}
```
2025-07-01 17:14:54 +08:00
2025-07-03 08:52:41 +08:00
#### 依赖管理
2025-07-02 21:10:23 +08:00
```xml
<!-- SQL解析 -->
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>4.9</version>
</dependency>
2025-07-01 17:14:54 +08:00
2025-07-02 21:10:23 +08:00
<!-- 模板引擎 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.2</version>
</dependency>
```
2025-07-01 17:14:54 +08:00
2025-07-03 08:52:41 +08:00
### ⚙️ 性能优化点
- 使用 `parallelStream()` 并行处理多表生成
- HikariCP 配置:
2025-07-02 21:10:23 +08:00
```yaml
hikari:
maximum-pool-size: 20
connection-timeout: 30000
```
2025-07-01 17:14:54 +08:00
2025-07-03 08:52:41 +08:00
### 🔄 类型转换策略
| 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
- ✅ 组件化设计合理
- ✅ 响应式状态管理有效
- ⚠️ 部分表单验证逻辑重复
- ⚠️ 表格分页逻辑可抽取为独立组件
### 💚 支持项目 ☕
2025-07-02 21:10:23 +08:00
如果这个项目对您有帮助,可以考虑支持我们:
2025-07-02 21:32:46 +08:00
![WeChat & Alipay](./images/wx_alipay.png)
2025-07-01 17:14:54 +08:00
**Happy Coding!** 🎉