这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
Gorm是什么
Gorm是一个已经迭代了10年+的功能强大的ORM(对象关系映射)框架,它在字节内部被广泛使用并且拥有非常丰富的开源扩展。
Gorm的安装
go get -u gorm.io/gorm
如果我们使用的是MySQL数据库,则可以使用以下命令安装相应的数据库驱动:
go get -u gorm.io/driver/mysql
类似地,假如我们需要使用其他类型数据库:
SQLite
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite
SQL Server
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlserver
PostgreSQL
go get -u gorm.io/gorm
go get -u gorm.io/driver/postgres
连接数据库(以MySQL为例)
package main
import {
"gorm.io/driver/mysql"
"gorm.io/gorm"
}
type Product struct {
gorm.Model
Id uint
Code string
Price uint
}
func main(){
dsn := "root:yc123456@tcp(127.0.0.1:3306)/test_01?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("failed to connect database!")
}
db.AutoMigrate(&Product{})
p := Product{Code: "L1213", Price: 1200}
//增
tx := db.Create(&p)
if tx != nil {
println("保存成功!")
}
}
数据添加成功,如图所示:
gorm声明模型gorm.Model
模型定义
模型是标准的 struct,由 Go 的基本数据类型、实现了 Scanner 和 Valuer 接口的自定义类型及其指针或别名组成。 例如:
type User struct {
ID uint
Name string
Email *string
Age uint
8 Birthday *time.Time
MemberNumber sql.NullString
ActivatedAt sql.NullTime
CreatedAt time.Time
UpdatedAt time.Time }
约定
GORM 倾向于约定,而不是配置。默认情况下,GORM 使用 ID 作为主键,使用结构体名的蛇形复数作为表名,字段名的蛇形作为列名,并使用 CreatedAt、UpdatedAt 字段追踪创建、更新时间
遵循 GORM 已有的约定,可以减少配置和代码量。如果约定不符合自己的需求,也可以自定义。
gorm.Model
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 会将其字段包含在父结构体中,例如:
文章参考自网站:GORM 创建_w3cschool