Gorm: Golang中的高性能ORM库
Gorm是Go编程语言中的一个高效ORM库,它对开发者非常友好。接下来,我们将探讨Gorm库的基本用法。
功能一览
- 全功能ORM。
- 支持各种关联方式,如Has One、Has Many、Belongs To、Many To Many、多态和单表继承。
- 在Create、Save、Update、Delete、Find中有钩子方法。
- 支持Preload和Joins的预加载。
- 提供事务管理,如事务、嵌套事务、保存点、回滚至保存点。
- 其他功能如Context、预编译模式、DryRun模式、批量插入、FindInBatches、使用SQL表达式和Context Valuer进行CRUD等。
- 强大的SQL构建器,支持Upsert、数据库锁、Optimizer/Index/Comment Hint、命名参数、子查询等。
- 自动数据库迁移功能。
- 自定义的日志记录器。
- 灵活的插件API,如支持多数据库、读写分离的Database Resolver、Prometheus等。
- 每项功能都经过严格的测试。
- 开发者友好性
模型定义
基本定义: 由于ORM可以自动创建数据库和表,所以我们需要使用一种约定的方式来描述schema。例如:
type User struct {
Name string
Email string
Age uint8
}
这种结构体可以描述user这个表。 gorm.Model: 它定义了Gorm的标准配置。
type Model struct {
ID uint `gorm:"primaryKey"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt gorm.DeletedAt `gorm:"index"`
}
这样,当你在一个结构体中嵌入gorm.Model时,它将为你的表添加一些基础字段。例如:
type User struct {
gorm.Model
Name string
Email string
Age uint8
}
这种表示方式实际上等价于:
type User struct {
ID uint `gorm:"primaryKey"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt gorm.DeletedAt `gorm:"index"`
Name string
Email string
Age uint8
}
嵌入结构体: gorm.Model就是一种嵌入结构体的例子。对于匿名字段,GORM会自动将其字段加入到父结构体中。你还可以使用embedded标签将一个普通的结构体字段嵌入另一个结构体。例如:
type Author struct {
Name string
Email string
}
type Blog struct {
ID int
Author Author `gorm:"embedded"`
Upvotes int32
}
这等效于:
type Blog struct {
ID int64
Name string
Email string
Upvotes int32
}
还可以使用embeddedPrefix标签为数据库中的字段名添加前缀。
总结
Gorm是一个强大且易用的Go ORM框架,支持多种数据库。