GORM Gen 是基于 GORM 的更安全的 ORM ,对开发人员更友好。
概述
- CRUD 或 DIY 查询方法代码生成
- 自动从数据库迁移到代码
- 事务、嵌套事务、保存点、回滚到保存点
- 与 GORM 完全兼容
- 对开发人员友好
- 拥有多种生成模式
安装
安装 Gen 包先要安装 Go ,并设置 Go 工作区。
1.首先需要安装 Go( 版本 1.14+),然后使用下面的 Go 命令安装 Gen 。
go get -u gorm.io/gen
然后在代码中导入
import "gorm.io/gen"
快速开始
注意:本文档中的所有用例都是在 WithContext 模式下生成的。如果你在 WithContext 模式下生成代码,请在调用任何查询方法之前删除 WithContext(ctx),可以使代码更加简洁。
# assume the following code in generate.go file $ cat generate.go
package main import "gorm.io/gen" // generate code func main() { // specify the output directory (default: "./query") // ### if you want to query without context constrain, set mode gen.WithoutContext ### g := gen.NewGenerator(gen.Config{ OutPath: "../dal/query", /* Mode: gen.WithoutContext|gen.WithDefaultQuery*/ //if you want the nullable field generation property to be pointer type, set FieldNullable true /* FieldNullable: true,*/ //if you want to generate index tags from database, set FieldWithIndexTag true /* FieldWithIndexTag: true,*/ //if you want to generate type tags from database, set FieldWithTypeTag true /* FieldWithTypeTag: true,*/ //if you need unit tests for query code, set WithUnitTest true /* WithUnitTest: true, */ }) // reuse the database connection in Project or create a connection here // if you want to use GenerateModel/GenerateModelAs, UseDB is necessray or it will panic // db, _ := gorm.Open(mysql.Open("root:@(127.0.0.1:3306)/demo?charset=utf8mb4&parseTime=True&loc=Local")) g.UseDB(db) // apply basic crud api on structs or table models which is specified by table name with function // GenerateModel/GenerateModelAs. And generator will generate table models' code when calling Excute. g.ApplyBasic(model.User{}, g.GenerateModel("company"), g.GenerateModelAs("people", "Person", gen.FieldIgnore("address"))) // apply diy interfaces on structs or table models g.ApplyInterface(func(method model.Method) {}, model.User{}, g.GenerateModel("company")) // execute the action of code generation g.Execute() }
生成模式:
gen.WithoutContext
生成无WithContext
约束的代码- gen.WithDefaultQuery 生成带有默认全局变量 Q 的单例代码
项目目录
以下是最佳实践模板:
demo ├── cmd │ └── generate │ └── generate.go # execute it will generate codes ├── dal │ ├── dal.go # create connections with database server here │ ├── model │ │ ├── method.go # DIY method interfaces │ │ └── model.go # store struct which corresponding to the database table │ └── query # generated code's directory | ├── user.gen.go # generated code for user │ └── gen.go # generated code ├── biz │ └── query.go # call function in dal/gorm_generated.go and query databases ├── config │ └── config.go # DSN for database server ├── generate.sh # a shell to execute cmd/generate ├── go.mod ├── go.sum └── main.go
API 示例
// 生成一个模型结构映射到数据库
g.GenerateModel("people")
// 生成一个结构体并指定结构体的名称。
g.GenerateModelAs("people", "People")
// 添加忽略字段的选项
g.GenerateModel("people", gen.FieldIgnore("address"), gen.FieldType("id", "int64"))
字段生成选项
FieldNew // 创建新字段
FieldIgnore // 忽略字段
FieldIgnoreReg // 忽略字段(匹配正则表达式)
FieldRename // 重命名结构体中的字段
FieldType // 指定字段类型
FieldTypeReg // 指定字段类型(匹配正则表达式)
FieldTag // 指定 gorm和 json 标签
FieldJSONTag // 指定 json 标签
FieldGORMTag // 指定 gorm 标签
FieldNewTag // 附加新标签
FieldTrimPrefix // 修剪列前缀
FieldTrimSuffix // 修剪列后缀
FieldAddPrefix // 添加前缀到结构成员的名称
FieldAddSuffix // 为结构成员的名称添加后缀
FieldRelate // 指定与其他表的关系
FieldRelateModel // 指定与现有型的关系
评论