将繁琐的代码编写变为自动化,GORM 强大而易用的代码生成工具 gorm/gen
2023-09-29 22:00:52
GORM 代码生成工具:自动生成 GORM 模型、查询和迁移代码
简介
GORM 是 Go 中使用广泛的 ORM 框架。它简化了与数据库的交互,使其操作更加方便、高效。然而,在使用 GORM 过程中,经常会出现一些重复性较强的工作,如生成表结构到 GORM 模型结构体的代码、生成迁移代码、生成返回所有字段的查询以及生成返回特定字段的查询。
为了解决这些问题,GORM 推出了其代码生成工具 gen 。gen 可以自动生成上述代码,大大减轻开发人员的工作负担。
安装
安装 gen 非常简单,只需要执行以下命令:
go install github.com/go-gorm/gen/cmd/gen@latest
使用
gen 的使用也非常简单,只需要提供数据库表名即可。例如,要生成 user
表的 GORM 模型结构体代码,可以执行以下命令:
gen -dbtype=mysql -host=127.0.0.1 -user=root -password=123456 -database=mydb user
这样就会生成一个 user.go
文件,其中包含了 user
表的 GORM 模型结构体。
详细用法
除了生成简单的 GORM 模型结构体代码外,gen 还有一些更详细的用法,可以通过命令行参数进行控制:
- -singleTable :指定生成的模型是否为单表模式。
- -genPkg :指定生成代码所在的包名。
- -srcPkg :指定从哪个包读取模板文件。
- -excludeTable :指定需要排除的表。
代码示例
// user.go
package models
import (
"time"
"github.com/go-gorm/gen/annotation"
)
type User struct {
ID int64 `gorm:"primary_key"`
Username string `gorm:"type:varchar(64);unique_index"`
Password string `gorm:"type:varchar(128)"`
Email string `gorm:"type:varchar(256);unique_index"`
Phone string `gorm:"type:varchar(32);unique_index"`
Avatar string `gorm:"type:varchar(256)"`
Status int32 `gorm:"type:int"`
CreatedAt time.Time `gorm:"autoCreateTime"`
UpdatedAt time.Time `gorm:"autoUpdateTime"`
DeletedAt *time.Time `gorm:"index"`
}
func (u *User) TableName() string {
return "user"
}
func (u *User) BeforeCreate() (err error) {
u.CreatedAt = time.Now().UTC()
return nil
}
func (u *User) BeforeUpdate() (err error) {
u.UpdatedAt = time.Now().UTC()
return nil
}
func (u *User) Annotation() annotation.Annotation {
return annotation.Annotation{
FieldAdd: map[string]annotation.FieldAdd{
"Status": {
Default: "1",
},
},
}
}
// main.go
package main
import (
"context"
"github.com/go-gorm/gen/models"
)
func main() {
// 初始化数据库连接
db, err := gorm.Open(mysql.Open("root:123456@tcp(127.0.0.1:3306)/mydb?charset=utf8mb4&parseTime=True&loc=Local"))
if err != nil {
panic(err)
}
// 使用 gen 生成的模型进行操作
userService := models.NewUserService(db)
user, err := userService.Find(context.Background(), "admin")
if err != nil {
panic(err)
}
fmt.Println(user)
}
常见问题解答
1. gen 能否生成所有表的代码?
是的,gen 可以通过指定 -all
参数生成所有表的代码。
2. gen 是否支持自定义模板?
是的,gen 支持自定义模板。可以指定 -tmpl
参数指定自定义模板文件。
3. gen 是否支持生成查询代码?
是的,gen 可以通过指定 -query
参数生成查询代码。
4. gen 是否支持生成迁移代码?
是的,gen 可以通过指定 -migrate
参数生成迁移代码。
5. gen 是否支持生成注释?
是的,gen 可以通过指定 -annotation
参数生成注释。
结论
GORM 代码生成工具 gen 是一个非常有用的工具,它可以自动生成 GORM 模型结构体代码、查询代码、迁移代码和注释。这大大简化了使用 GORM 的过程,提高了开发效率。