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 指数为
超过 的项目

评论 (0)

加载中
更多评论
暂无内容
发表了博客
2019/11/28 14:26

go之gorm

1、简介 ORM Object-Relationl Mapping, 它的作用是映射数据库和对象之间的关系,方便我们在实现数据库操作的时候不用去写复杂的sql语句,把对数据库的操作上升到对于对象的操作。 gorm gorm就是基于Go语言实现的ORM库。 类似于Java生态里大家听到过的Mybatis、Hibernate、SpringData等。 Github https://github.com/jinzhu/gorm 官方文档 https://gorm.io/ 2、如何使用Gorm 只要四步就能上手gorm,可以尽情的沉浸在毫无技术含...

0
0
发表于开发技能专区
2020/12/19 11:24

GORM

本文同步分享在 博客“羊羽”(other)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

0
0
发表于云计算专区
2020/10/22 11:46

gorm: 事务

## 事务 * [gorm事务](https://gorm.io/zh_CN/docs/transactions.html) ## 1.禁用默认事务 * SkipDefaultTransaction 为了确保数据一致性,GORM 会在事务里执行写入操作(创建、更新、删除)。 如果没有这方面的要求,您可以在初始化时禁用它,这将获得大约 30%+ 性能提升 ```go // 全局禁用 db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{ SkipDefaultTransaction: true, }) // 持续会话模式 tx := db.Session(&...

0
0
发表了博客
2017/10/19 16:29

gorm笔记

感觉gorm文档还是太简单了,一些坑需要自己踩到再看源码才知道。 ### 错误处理 不管什么操作,不要使用原始的DB对象获取错误,因为操作内部实际上是生成了一个新的DB对象并返回。 下面的用法是错误的: ``` var DB *gorm.DB //..... DB.Create(&user) if DB.Error != nil { panic(DB.Error) } ``` 正确的方法: ``` var DB *gorm.DB //..... if newdb := DB.Create(&user);newdb.Error != nil { panic(newdb.Error) } ``` 除了C...

0
1
发表了博客
2019/09/12 16:06

gorm demo

package main import ( "fmt" "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/sqlite" ) type Product struct { Id int Num int } func main() { db, err := gorm.Open("sqlite3", "/root/test.db") if err != nil { fmt.Println("连接数据库失败") } defer db.Close() // 自动迁移模式 db.AutoMigrate(&Product{}) ...

0
0
2020/06/19 17:38

GORM 指南

https://gorm.io/zh_CN/docs/

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
1 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部