GORM Gen 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
GORM Gen 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
GORM Gen 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 MIT
开发语言 Google Go
操作系统 未知
软件类型 开源软件
开源组织
地区 国产
投 递 者 罗奇奇
适用人群 未知
收录时间 2021-11-09

软件简介

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  // 指定与现有型的关系
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论

点击引领话题📣 发布并加入讨论🔥
暂无内容
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
暂无内容
0 评论
2 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部