30 | ORM:CURD 神器 GORM 包介绍及实战
孔令飞
该思维导图由 AI 生成,仅供参考
你好,我是孔令飞。
在用 Go 开发项目时,我们免不了要和数据库打交道。每种语言都有优秀的 ORM 可供选择,在 Go 中也不例外,比如gorm、xorm、gorose等。目前,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 等。
公开
同步至部落
取消
完成
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
《Go 语言项目开发实战》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(26)
- 最新
- 精选
- Sch0nggo语言中,orm使用gorm包。 gorm功能全,操作界面符合直觉,不需要额外的理解负担。
作者回复: 是这样的,老哥学习课程很认真!
2021-08-166 - 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-093 - 潘达gorm下是否有从表中直接生成struct的工具呢,xorm下的反向生成工具还是挺实用的
作者回复: 试试这个:https://github.com/Shelnutt2/db2struct
2021-09-153 - huining如果按照这样写,那用不了事务啊,比如老师的代码里删除用户时,是先调用polices.delete(),然后再delete用户,那假如中途出错,也无法回滚。我的做法是再加一个*DB参数,但是感觉写起来很丑,方法里要判断之前是否启动了事务。所以如果想要添加对事务的支持应该怎么做呢?
作者回复: 如果要用事务,肯定是要传*db参数。 或者在失败时调用defer func() {s.srv.Delete()}()这样的语句,来回滚
2021-12-152 - 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-032 - XIgo的连接池网上教程有点少,go 连接redis,monggodb 应该都需要连接池,gorm官方文档连接池的讲解也是寥寥数语,老师能不能详细补充点连接池相关的,如何使用,如果能再加上redis ,mongdb 的连接池一类的就更好了
作者回复: 回头整理下。
2021-10-122 - wei 丶孔大,ent咋样 有没有ent的讲解呢 👀
作者回复: 感觉gorm才是王道
2022-08-01归属地:广东1 - 邵俊达请问 gorm 如何处理操作多张表的事务?比如类似 ``` begin User.save Book.update Account.update commit ``` 用 gorm 的 transaction 就要用他的 tx 来操作数据,那封装好的 dao 是不是就没法用了?
作者回复: 是的,可能要用另外的封装方式了
2021-12-1421 - liaomars老师: sqlDB.SetMaxIdleConns(10) // 设置MySQL的最大空闲连接数(推荐100) 这个最大空闲连接数是10还是100?代码写的是10,注释写的是100
作者回复: 100哈,代码我找编辑更正下。
2021-12-031
收起评论