go语言之框架-gorm | 青训营笔记
这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
Go框架三件套(Web/RPC/ORM)
- Gorm
- Kitex
- Hertz
什么是orm
介绍
Object-Relationl Mapping,即对象关系映射,这里的Relationl指的是关系型数据库
它的作用是在关系型数据库和对象之间作一个映射,我们在具体的操作数据库,就不用和复杂的SQL语句摩擦,只要像平时操作对象一样操作它就可以了
ORM优缺点
优点
- 提高开发效率
缺点
- 牺牲执行性能
- 牺牲灵活性
- 弱化SQL能力
gorm
gorm是一个使用Go语言编写的ORM框架。它文档齐全,对开发者友好,支持主流数据库。
安装
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite
模型声明
-
表名为struct name的snake_cases (下划线连接)复数格式
-
字段名为field name的snake_case单数格式
-
ID/Id字段为主键,如果为数字,则为自增主键
-
CreatedAt 字段,创建时,保存当前时间
-
UpdatedAt 字段,创建、更新时,保存当前时间
-
gorm.DeletedAt 字段,默认开启 soft delete 模式
GORM 定义一个 gorm.Model 结构体,其包括字段 ID、CreatedAt、UpdatedAt、DeletedAt
// gorm.Model 的定义
type Model struct {
ID uint `gorm:"primaryKey"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt gorm.DeletedAt `gorm:"index"`
}
对于匿名字段,GORM 会将其字段包含在父结构体中,例如:
type User struct {
gorm.Model
Name string
}
// 等效于
type User struct {
ID uint `gorm:"primaryKey"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt gorm.DeletedAt `gorm:"index"`
Name string
}
使用标签 embeddedPrefix 来为 db 中的字段名添加前缀
type Blog struct {
ID int
Author Author `gorm:"embedded;embeddedPrefix:author_"`
Upvotes int32
}
// 等效于
type Blog struct {
ID int64
AuthorName string
AuthorEmail string
Upvotes int32
}
MySQL,连接池链接
// 连接数据库
//dsn := "user:password@tcp(ip:port)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
dsn := "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
GORM 使用database/sql维护连接池
sqlDB, err := db.DB()
// 空闲连接池中连接的最大数量
sqlDB.SetMaxIdleConns(10)
// 打开数据库连接的最大数量。
sqlDB.SetMaxOpenConns(100)
// 连接可复用的最大时间。
sqlDB.SetConnMaxLifetime(time.Hour)