GORM Gen基于 GORM 的安全 ORM

联合创作 · 2023-09-30 01:31

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 // 指定与现有型的关系


浏览 20
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报