GORM GEN是GORM的代码生成工具,可以根据数据库表自动生成DAO层代码。
一、使用gentool生成
1、安装 gentool
go install gorm.io/gen/tools/gentool@latest
2、运行 gentool 自动生成model和query
官方样例如下:
gentool -dsn "user:pwd@tcp(127.0.0.1:3306)/database?charset=utf8mb4&parseTime=True&loc=Local" -tables "orders,doctor"
运行完以后在根目录下生成以下结构目录
model存放数据结构,query存放增删改查方法
二、使用gen代码生成
1、安装gen
go get -u gorm.io/gen
2、编写 gen代码
官方示例如下
package main
import "gorm.io/gen"
// Dynamic SQL
type Querier interface {
// SELECT * FROM @@table WHERE name = @name{{if role !=""}} AND role = @role{{end}}
FilterWithNameAndRole(name, role string) ([]gen.T, error)
}
func main() {
g := gen.NewGenerator(gen.Config{
OutPath: "../query", // 定义 dao 文件输出目录
Mode: gen.WithoutContext|gen.WithDefaultQuery|gen.WithQueryInterface, // generate mode
ModelPkgPath: "./output/entity", // 定义 model 文件输出目录
})
// 配置数据库连接信息
gormdb, _ := gorm.Open(mysql.Open("root:@(127.0.0.1:3306)/demo?charset=utf8mb4&parseTime=True&loc=Local"))
//启用数据库连接
g.UseDB(gormdb) // reuse your gorm db
//生成单个表的model 若只为了生成model则不需要接受参数,如下生成所有表model的示例
userModel := g.GenerateModel("menu_table")
//生成所有表的model
//g.GenerateAllTable()
//根据model生成dao文件
// Generate basic type-safe DAO API for struct `model.User` following conventions
g.ApplyBasic(userModel)
//根据所有model生成dao文件
//g.ApplyBasic(g.GenerateAllTable()...)
//对于已经存在model的情况,可以传入该model的实例,如下所示
//g.ApplyBasic(model.User{})
//根据接口生成自定义方法
// Generate Type Safe API with Dynamic SQL defined on Querier interface for `model.User` and `model.Company`
g.ApplyInterface(func(Querier) {}, userModel)
//执行
// Generate the code
g.Execute()
}
3、运行以生成代码文件
go run main.go
4、使用生成的代码
import "your_project/query"
func main() {
// Basic DAO API
user, err := query.User.Where(u.Name.Eq("modi")).First()
//上文中自定义的方法
// Dynamic SQL API
users, err := query.User.FilterWithNameAndRole("modi", "admin")
}