golang通过SQL DDL自动生成GORM模型插件库godal的使用
golang通过SQL DDL自动生成GORM模型插件库godal的使用
godal提供了生成特定golang代码的能力,目标是让开发者能够以高效的方式编写快速代码。
功能
- 通过指定SQL DDL文件生成对应的Golang ORM模型,可用于GORM
- 后续更新
godal已被添加到awesome-go项目中
安装
使用此包需要安装Go环境并启用Go Modules。
安装godal的方法:
git clone git@github.com:mafulong/godal.git
cd godal
go install
确保执行which godal
命令能看到结果。
SQL转Golang模型
godal gen model --database {数据库名} {SQL文件}
示例
进入该仓库的test目录执行:
godal gen model --database testdb gen_model.sql
生成的模型示例文件1:
package testdb
import "time"
type TestTb1 struct {
TestId int `gorm:"Column:test_id" json:"test_id"`
TestTitle string `gorm:"Column:test_title" json:"test_title"`
TestAuthor string `gorm:"Column:test_author" json:"test_author"`
SubmissionDate time.Time `gorm:"Column:submission_date" json:"submission_date"`
}
func (TestTb1) TableName() string {
return "test_tb1"
}
许可证
MIT许可证。
更多关于golang通过SQL DDL自动生成GORM模型插件库godal的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang通过SQL DDL自动生成GORM模型插件库godal的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用godal自动从SQL DDL生成GORM模型
godal是一个能够从SQL DDL语句自动生成GORM模型的Go库,它可以显著提高开发效率,特别是在已有数据库结构需要映射到Go模型时。
godal安装
go get -u github.com/lingdor/godal
基本使用方法
1. 从SQL DDL生成GORM模型
package main
import (
"fmt"
"github.com/lingdor/godal"
)
func main() {
// 定义SQL DDL语句
sql := `
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
age INT DEFAULT 18,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL
);
`
// 生成GORM模型
model, err := godal.GenerateModelFromSQL(sql, "users", "model")
if err != nil {
panic(err)
}
fmt.Println(model)
}
2. 生成的文件示例
上述代码会生成类似以下的GORM模型:
package model
import (
"time"
"gorm.io/gorm"
)
type User struct {
ID uint `gorm:"primaryKey;autoIncrement"`
Username string `gorm:"size:50;not null"`
Email string `gorm:"size:100;unique"`
Age int `gorm:"default:18"`
CreatedAt time.Time `gorm:"default:CURRENT_TIMESTAMP"`
UpdatedAt time.Time `gorm:"default:CURRENT_TIMESTAMP;autoUpdateTime"`
DeletedAt gorm.DeletedAt `gorm:"index"`
}
高级功能
1. 自定义标签和选项
options := godal.Options{
TableName: "users",
Package: "model",
JSONTags: true, // 添加json标签
GormTags: true, // 添加gorm标签
Nullable: true, // 处理可为NULL的字段
WithGormDB: false, // 不生成DB相关方法
}
model, err := godal.GenerateModelFromSQLWithOptions(sql, options)
2. 从数据库直接生成
godal还支持直接从数据库连接生成模型:
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
"github.com/lingdor/godal"
)
func main() {
db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname")
if err != nil {
panic(err)
}
defer db.Close()
// 从数据库表生成模型
model, err := godal.GenerateModelFromDB(db, "users", "model")
if err != nil {
panic(err)
}
fmt.Println(model)
}
3. 生成CRUD方法
options := godal.Options{
TableName: "users",
Package: "model",
WithGormDB: true, // 生成基本的CRUD方法
}
model, err := godal.GenerateModelFromSQLWithOptions(sql, options)
这会生成包含基本CRUD操作的结构体和方法。
实际应用示例
假设我们有一个博客系统的数据库表:
CREATE TABLE posts (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
content TEXT,
author_id INT NOT NULL,
status ENUM('draft', 'published', 'archived') DEFAULT 'draft',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (author_id) REFERENCES users(id)
);
使用godal生成模型:
package main
import (
"fmt"
"github.com/lingdor/godal"
)
func main() {
sql := `...上面的SQL语句...`
options := godal.Options{
TableName: "posts",
Package: "model",
JSONTags: true,
GormTags: true,
WithGormDB: true,
}
model, err := godal.GenerateModelFromSQLWithOptions(sql, options)
if err != nil {
panic(err)
}
// 保存到文件
err = godal.SaveModelToFile(model, "model/posts.go")
if err != nil {
panic(err)
}
fmt.Println("模型已生成并保存到 model/posts.go")
}
生成的结果文件会包含适当的GORM标签和关联关系。
注意事项
- godal目前主要支持MySQL语法,对其他数据库的支持可能有限
- 复杂的关系可能需要手动调整生成的代码
- 生成的模型可以作为起点,但可能需要根据业务需求进行修改
- 建议将生成代码与手写代码分开管理
godal可以显著减少编写样板代码的时间,特别是在已有数据库结构的情况下,能够快速生成对应的GORM模型,提高开发效率。