搜索

pdf文档 2.2.7 GORM 剖析与最佳实践

4.68 MB 29 页 0 下载 3 浏览 0 评论 0 收藏
所属分类: 后端开发 / Go
语言 格式 评分
中文(简体)
.pdf
3
摘要
文档为GORM剖析与最佳实践的演讲内容,由张金柱(字节跳动)在GOPHER CHINA 2020上分享。核心内容包括:GORM五分钟快速入门,涵盖模型定义、数据库连接、自动迁移;最佳实践与FAQ部分涉及数据库事务管理,如全局禁用默认事务、使用Transaction而非Begin、嵌套事务与回滚;插件工作机制通过GORM Callbacks实现,支持Create、Update、Delete、Query、Row、Raw六种回调;多数据库/读写分离通过dbresolver插件配置主从数据库及策略组。文档还列出待续内容如关联操作、分库分表、子查询、预编译语句等。
AI总结
GORM 是一个流行的 Go 语言 ORM 库。文档主要介绍了其最佳实践、核心机制和快速入门。 **核心观点与最佳实践** - **共享分页逻辑**:通过 `db.Scopes(Paginate(r))` 可以复用分页代码,提高代码效率。 - **数据库事务**: - 可通过 `SkipDefaultTransaction: true` 全局禁用默认事务,以提升性能。 - 推荐使用 `db.Transaction` 进行事务操作,而非 `db.Begin`,前者更简洁且支持嵌套事务。 - 在事务中返回 `nil` 提交,返回 `error` 则回滚。 - **关联查询**:使用 `db.Preload("Orders", func(db *gorm.DB) *gorm.DB { return db.Order("orders.amount DESC") })` 可以对预加载的关联数据进行排序等操作。 **插件与读写分离** - **GORM Callbacks**:GORM 支持 Create、Update、Delete、Query、Row、Raw 六种回调,插件通过注册这些回调来工作(例如 OpenTracing 插件)。 - **读写分离**:通过 `dbresolver` 插件实现。可以配置主库(Sources)和从库(Replicas),并支持策略组(如 `secondary`)。通过 `Clauses(dbresolver.Write)` 或 `Clauses(dbresolver.Use("secondary"))` 指定读写模式和数据源。 **五分钟快速入门** - **初始化**:导入 `gorm.io/gorm` 和对应数据库驱动(如 `gorm.io/driver/mysql`)。 - **模型定义**:定义结构体(如 `Product`),包含字段和标签。 - **连接数据库**:使用 `gorm.Open` 连接,并可配置日志等选项。 - **迁移**:使用 `db.AutoMigrate` 或 `db.Migrator().CreateTable` 自动创建或更新表结构。 **其他要点** - 文档还提及了 SQL 生成(Locking、Batch Upsert)、默认值、软删除、复合主键、DryRun 模式等更多高级特性。
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
下载文档到本地,方便使用
- 可预览页数已用完,剩余 17 页请下载阅读 -
文档评分
请文明评论,理性发言.