gin-base/db/cmd/gendb/README.md

349 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Magic-ORM 代码生成器 - 命令行工具
## 🚀 快速开始
### 1. 构建命令行工具
**Windows:**
```bash
build.bat
```
**Linux/Mac:**
```bash
chmod +x build.sh
./build.sh
```
或者手动构建:
```bash
cd db
go build -o ../bin/gendb ./cmd/gendb
```
### 2. 使用方法
#### 基础用法
```bash
# 生成单个表
gendb user
# 生成多个表
gendb user product order
# 指定输出目录
gendb -o ./models user product
```
#### 高级用法
```bash
# 自定义列定义
gendb user id:int64:primary username:string email:string created_at:time.Time
# 混合使用(自动推断 + 自定义)
gendb -o ./generated user username:string email:string product name:string price:float64
# 查看版本
gendb -v
# 查看帮助
gendb -h
```
## 📋 功能特性
**自动生成**: 根据表名自动推断常用字段
**批量生成**: 一次生成多个表的代码
**自定义列**: 支持手动指定列定义
**灵活输出**: 可指定输出目录
**智能推断**: 自动识别常见表结构
## 🎯 支持的类型
| 类型别名 | Go 类型 |
|---------|---------|
| int, integer, bigint | int64 |
| string, text, varchar | string |
| time, datetime | time.Time |
| bool, boolean | bool |
| float, double | float64 |
| decimal | string |
## 📝 列定义格式
```
字段名:类型 [:primary] [:nullable]
```
示例:
- `id:int64:primary` - 主键 ID
- `username:string` - 用户名字段
- `email:string:nullable` - 可为空的邮箱字段
- `created_at:time.Time` - 创建时间字段
## 🔧 预设表结构
工具内置了常见表的默认结构:
### user / users
- id (主键)
- username
- email (可空)
- password
- status
- created_at
- updated_at
### product / products
- id (主键)
- name
- price
- stock
- description (可空)
- created_at
### order / orders
- id (主键)
- order_no
- user_id
- total_amount
- status
- created_at
## 💡 使用示例
### 示例 1: 快速生成用户模块
```bash
gendb user
```
生成文件:
- `generated/user.go` - User Model
- `generated/user_dao.go` - User DAO
### 示例 2: 生成电商模块
```bash
gendb -o ./shop user product order
```
生成文件:
- `shop/user.go`
- `shop/user_dao.go`
- `shop/product.go`
- `shop/product_dao.go`
- `shop/order.go`
- `shop/order_dao.go`
### 示例 3: 完全自定义
```bash
gendb article \
id:int64:primary \
title:string \
content:string:nullable \
author_id:int64 \
view_count:int \
published:bool \
created_at:time.Time
```
## 📁 生成的代码结构
### Model (user.go)
```go
package model
import "time"
// User user 表模型
type User struct {
ID int64 `json:"id" db:"id"`
Username string `json:"username" db:"username"`
Email string `json:"email" db:"email"`
CreatedAt time.Time `json:"created_at" db:"created_at"`
UpdatedAt time.Time `json:"updated_at" db:"updated_at"`
}
// TableName 表名
func (User) TableName() string {
return "user"
}
```
### DAO (user_dao.go)
```go
package dao
import (
"context"
"git.magicany.cc/black1552/gin-base/db/core"
"git.magicany.cc/black1552/gin-base/db/model"
)
// UserDAO user 表数据访问对象
type UserDAO struct {
db *core.Database
}
// NewUserDAO 创建 UserDAO 实例
func NewUserDAO(db *core.Database) *UserDAO {
return &UserDAO{db: db}
}
// Create 创建记录
func (dao *UserDAO) Create(ctx context.Context, model *model.User) error {
_, err := dao.db.Model(model).Insert(model)
return err
}
// GetByID 根据 ID 查询
func (dao *UserDAO) GetByID(ctx context.Context, id int64) (*model.User, error) {
var result model.User
err := dao.db.Model(&model.User{}).Where("id = ?", id).First(&result)
if err != nil {
return nil, err
}
return &result, nil
}
// ... 更多 CRUD 方法
```
## 🛠️ 安装到 PATH
### Windows
1.`bin` 目录添加到系统环境变量 PATH
2. 或者复制 `gendb.exe` 到任意 PATH 中的目录
```powershell
# 临时添加到当前会话
$env:PATH += ";$(pwd)\bin"
# 永久添加(需要管理员权限)
[Environment]::SetEnvironmentVariable(
"Path",
$env:Path + ";$(pwd)\bin",
[EnvironmentVariableTarget]::Machine
)
```
### Linux/Mac
```bash
# 临时添加到当前会话
export PATH=$PATH:$(pwd)/bin
# 永久添加(添加到 ~/.bashrc 或 ~/.zshrc
echo 'export PATH=$PATH:$(pwd)/bin' >> ~/.bashrc
source ~/.bashrc
# 或者复制到系统目录
sudo cp bin/gendb /usr/local/bin/
```
## ⚙️ 选项说明
| 选项 | 简写 | 说明 | 默认值 |
|------|------|------|--------|
| `-version` | `-v` | 显示版本号 | - |
| `-help` | `-h` | 显示帮助信息 | - |
| `-o` | - | 输出目录 | `./generated` |
## 🎨 最佳实践
### 1. 从数据库读取真实结构
```bash
# 先用 SQL 导出表结构
mysql -u root -p -e "DESCRIBE your_database.users;"
# 然后根据输出调整列定义
```
### 2. 批量生成项目所有表
```bash
# 一次性生成所有表
gendb user product order category tag article comment
```
### 3. 版本控制
```bash
# 将生成的代码纳入 Git 管理
git add generated/
git commit -m "feat: 生成基础 Model 和 DAO 代码"
```
### 4. 自定义扩展
生成的代码可以作为基础,手动添加:
- 业务逻辑方法
- 验证逻辑
- 关联查询
- 索引优化
## ⚠️ 注意事项
1. **生成的代码需审查**: 自动生成的代码可能不完全符合业务需求
2. **不要频繁覆盖**: 手动修改的代码可能会被覆盖
3. **类型映射**: 特殊类型可能需要手动调整
4. **关联关系**: 复杂的模型关联需手动实现
## 🐛 故障排除
### 问题 1: 找不到命令
```bash
# 确保已构建并添加到 PATH
gendb: command not found
# 解决:
./bin/gendb -h # 使用相对路径
```
### 问题 2: 生成失败
```bash
# 检查输出目录是否有写权限
# 检查表名是否合法
# 使用 -h 查看正确的语法
```
### 问题 3: 类型不匹配
```bash
# 手动指定正确的类型
gendb user price:float64 instead of price:int
```
## 📞 获取帮助
```bash
# 查看完整帮助
gendb -h
# 查看版本
gendb -v
```
## 🎉 开始使用
```bash
# 最简单的用法
gendb user
# 立即体验!
```
---
**Magic-ORM Code Generator** - 让代码生成如此简单!🚀