Go 语言项目开发实战
孔令飞
腾讯云专家工程师,前 Red Hat、联想云工程师
41030 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 61 讲
Go 语言项目开发实战
15
15
1.0x
00:00/00:00
登录|注册

30 | ORM:CURD 神器 GORM 包介绍及实战

Listing records
Deleting records
Updating records
Finding records
Inserting records
Auto migration
V2 (used in IAM project)
V1
Support for multiple databases
Association queries
Auto Migration
Developer-friendly
Hook methods
Full functionality
Implementing transaction rollback with GORM
AutoMigrate in production environment
Hooks and real-world usage in IAM project
Advanced queries and native SQL
Features and common operations
GORM usage in Go projects
Performing CRUD operations
Creating and using MySQL factory
Configuration of MySQL connection parameters
Supported hooks
BeforeCreate hook
Executing SQL
Querying with SQL
Other advanced features
Count
Distinct
Limit & Offset
Sorting records
Predefined model fields
Customizing table and column names
Default model behavior
Auto migration in small projects
Deleting table records
Viewing table records
Updating table records
Inserting table records
Connecting to the database
Operations
MySQL database connection
Versions
Features
Exercises
Conclusion
IAM-apiserver CRUD Operations
GORM Hooks
Native SQL
Advanced Queries
Model Definition
Common GORM Operations
GORM Example
GORM
ORM: GORM

该思维导图由 AI 生成,仅供参考

你好,我是孔令飞。
在用 Go 开发项目时,我们免不了要和数据库打交道。每种语言都有优秀的 ORM 可供选择,在 Go 中也不例外,比如gormxormgorose等。目前,GitHub 上 star 数最多的是 GORM,它也是当前 Go 项目中使用最多的 ORM。
IAM 项目也使用了 GORM。这一讲,我就来详细讲解下 GORM 的基础知识,并介绍 iam-apiserver 是如何使用 GORM,对数据进行 CURD 操作的。

GORM 基础知识介绍

GORM 是 Go 语言的 ORM 包,功能强大,调用方便。像腾讯、华为、阿里这样的大厂,都在使用 GORM 来构建企业级的应用。GORM 有很多特性,开发中常用的核心特性如下:
功能全。使用 ORM 操作数据库的接口,GORM 都有,可以满足我们开发中对数据库调用的各类需求。
支持钩子方法。这些钩子方法可以应用在 Create、Save、Update、Delete、Find 方法中。
开发者友好,调用方便。
支持 Auto Migration。
支持关联查询。
支持多种关系数据库,例如 MySQL、Postgres、SQLite、SQLServer 等。
GORM 有两个版本,V1V2。遵循用新不用旧的原则,IAM 项目使用了最新的 V2 版本。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

GORM是Go语言中备受欢迎的ORM包之一,提供强大的数据库操作功能。本文详细介绍了GORM的基础知识和示例应用,包括模型定义、连接数据库、创建、删除和更新记录,以及查询数据等方面。文章通过示例代码演示了如何使用GORM进行CURD操作,以及GORM常用操作的详细讲解。读者可以通过本文快速了解GORM的基本用法和特点,为Go语言项目中的数据库操作提供了有力的支持。文章还介绍了GORM的高级查询功能和原生SQL的使用,为读者提供了全面的数据库操作指南。 GORM的强大功能和灵活性使其成为Go语言中不可或缺的数据库操作工具。文章还介绍了iam-apiserver如何使用GORM进行CURD操作,包括配置连接MySQL参数、创建密钥、更新密钥、删除密钥、获取密钥详情、查询密钥列表等操作。通过控制层、业务层和仓库层的包含关系,实现了对数据库的CURD操作。整体而言,本文全面介绍了GORM的基本用法和高级功能,以及在iam-apiserver中的实际应用,为读者提供了深入理解和应用GORM的指南。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 语言项目开发实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(26)

  • 最新
  • 精选
  • Sch0ng
    go语言中,orm使用gorm包。 gorm功能全,操作界面符合直觉,不需要额外的理解负担。

    作者回复: 是这样的,老哥学习课程很认真!

    2021-08-16
    6
  • Geek_004fb2
    老师,企业级的应用往往需要在业务层处理"事物",这个模式应该如何设计比较优雅?我看了iam项目暂时没发现相关处理

    作者回复: 事务可以在 service层,不过可能要重新设计下代码了

    2022-11-08归属地:广东
    3
  • helloworld
    测试发现项目中的软删除功能不起作用, 需要将源码 https://github.com/marmotedu/component-base/blob/master/pkg/meta/v1/types.go 中的 DeletedAt *time.Time `json:"-" gorm:"column:deletedAt;index:idx_deletedAt"` 改为: DeletedAt gorm.DeletedAt `json:"-" gorm:"index;column:deletedAt"`

    作者回复: 感谢反馈,我修复下

    2021-11-09
    3
  • 潘达
    gorm下是否有从表中直接生成struct的工具呢,xorm下的反向生成工具还是挺实用的

    作者回复: 试试这个:https://github.com/Shelnutt2/db2struct

    2021-09-15
    3
  • huining
    如果按照这样写,那用不了事务啊,比如老师的代码里删除用户时,是先调用polices.delete(),然后再delete用户,那假如中途出错,也无法回滚。我的做法是再加一个*DB参数,但是感觉写起来很丑,方法里要判断之前是否启动了事务。所以如果想要添加对事务的支持应该怎么做呢?

    作者回复: 如果要用事务,肯定是要传*db参数。 或者在失败时调用defer func() {s.srv.Delete()}()这样的语句,来回滚

    2021-12-15
    2
  • yandongxiao
    总结: 1. 首先定义一个 GORM 模型(Models),GORM模型就是一个普普通通的golang struct。使用结构体名的 snake_cases 作为表名,使用字段名的 snake_case 作为列名。 2. gorm.Model 为表增加了 ID、CreatedAt、UpdatedAt、DeletedAt 等字段。如果是资源表,建议统一资源的元数据。参见第29章节。 3. 在结构体中,通过 tag,指定数据库中字段的名称。 4. gorm 支持表CRUD操作,每种操作也会有各种变形,与 数据库操作相对应。

    作者回复: 6666

    2021-12-03
    2
  • XI
    go的连接池网上教程有点少,go 连接redis,monggodb 应该都需要连接池,gorm官方文档连接池的讲解也是寥寥数语,老师能不能详细补充点连接池相关的,如何使用,如果能再加上redis ,mongdb 的连接池一类的就更好了

    作者回复: 回头整理下。

    2021-10-12
    2
  • wei 丶
    孔大,ent咋样 有没有ent的讲解呢 👀

    作者回复: 感觉gorm才是王道

    2022-08-01归属地:广东
    1
  • 邵俊达
    请问 gorm 如何处理操作多张表的事务?比如类似 ``` begin User.save Book.update Account.update commit ``` 用 gorm 的 transaction 就要用他的 tx 来操作数据,那封装好的 dao 是不是就没法用了?

    作者回复: 是的,可能要用另外的封装方式了

    2021-12-14
    2
    1
  • liaomars
    老师: sqlDB.SetMaxIdleConns(10) // 设置MySQL的最大空闲连接数(推荐100) 这个最大空闲连接数是10还是100?代码写的是10,注释写的是100

    作者回复: 100哈,代码我找编辑更正下。

    2021-12-03
    1
收起评论
显示
设置
留言
26
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部