- 实现配置文件自动查找功能,支持yaml、yml、toml、ini、json格式 - 添加查询缓存机制,提高重复查询性能 - 新增构建脚本build.sh和build.bat用于跨平台编译 - 添加完整的数据库连接配置和时间字段配置功能 - 实现DAO基类提供通用CRUD操作方法 - 添加配置文件示例和相关测试用例 |
||
|---|---|---|
| .. | ||
| README.md | ||
| main.go | ||
README.md
Magic-ORM 代码生成器 - 命令行工具
🚀 快速开始
1. 构建命令行工具
Windows:
build.bat
Linux/Mac:
chmod +x build.sh
./build.sh
或者手动构建:
cd db
go build -o ../bin/gendb ./cmd/gendb
2. 使用方法
基础用法
# 生成单个表
gendb user
# 生成多个表
gendb user product order
# 指定输出目录
gendb -o ./models user product
高级用法
# 自定义列定义
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- 主键 IDusername: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: 快速生成用户模块
gendb user
生成文件:
generated/user.go- User Modelgenerated/user_dao.go- User DAO
示例 2: 生成电商模块
gendb -o ./shop user product order
生成文件:
shop/user.goshop/user_dao.goshop/product.goshop/product_dao.goshop/order.goshop/order_dao.go
示例 3: 完全自定义
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)
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)
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
- 将
bin目录添加到系统环境变量 PATH - 或者复制
gendb.exe到任意 PATH 中的目录
# 临时添加到当前会话
$env:PATH += ";$(pwd)\bin"
# 永久添加(需要管理员权限)
[Environment]::SetEnvironmentVariable(
"Path",
$env:Path + ";$(pwd)\bin",
[EnvironmentVariableTarget]::Machine
)
Linux/Mac
# 临时添加到当前会话
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. 从数据库读取真实结构
# 先用 SQL 导出表结构
mysql -u root -p -e "DESCRIBE your_database.users;"
# 然后根据输出调整列定义
2. 批量生成项目所有表
# 一次性生成所有表
gendb user product order category tag article comment
3. 版本控制
# 将生成的代码纳入 Git 管理
git add generated/
git commit -m "feat: 生成基础 Model 和 DAO 代码"
4. 自定义扩展
生成的代码可以作为基础,手动添加:
- 业务逻辑方法
- 验证逻辑
- 关联查询
- 索引优化
⚠️ 注意事项
- 生成的代码需审查: 自动生成的代码可能不完全符合业务需求
- 不要频繁覆盖: 手动修改的代码可能会被覆盖
- 类型映射: 特殊类型可能需要手动调整
- 关联关系: 复杂的模型关联需手动实现
🐛 故障排除
问题 1: 找不到命令
# 确保已构建并添加到 PATH
gendb: command not found
# 解决:
./bin/gendb -h # 使用相对路径
问题 2: 生成失败
# 检查输出目录是否有写权限
# 检查表名是否合法
# 使用 -h 查看正确的语法
问题 3: 类型不匹配
# 手动指定正确的类型
gendb user price:float64 instead of price:int
📞 获取帮助
# 查看完整帮助
gendb -h
# 查看版本
gendb -v
🎉 开始使用
# 最简单的用法
gendb user
# 立即体验!
Magic-ORM Code Generator - 让代码生成如此简单!🚀