使用 GORM(Go 的 ORM 库)连接数据库 | 青训营

41 阅读1分钟

模型定义 模型是标准的 struct,由 Go 的基本数据类型、实现了 Scanner 和 Valuer 接口的自定义类型及其指针或别名组成 简单来说就是我们日常开发中定义的结构体

type User struct { ID uint Name string Email *string Age uint8 Birthday *time.Time MemberNumber sql.NullString ActivatedAt sql.NullTime CreatedAt time.Time UpdatedAt time.Time } gorm.Model gorm倾向于约定大于配置,默认情况下,GORM 使用 ID 作为主键,使用结构体名的 蛇形复数 作为表名,字段名的 蛇形 作为列名,并使用 CreatedAt、UpdatedAt 字段追踪创建、更新时间

针对上述约定,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.Model嵌入自定义结构体中

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 } 这样做有什么好处?

Create和Update的时候自动填充创建时间和更新时间,在创建的时候自动检测主键冲突,如果冲突则更新

在查询的时候自动保证数据不是被逻辑删除的

// Create db.Create(&Product{Code: "D42", Price: 100}) // Read var product Product db.Debug().First(&product, 1) // 根据整形主键查找 对应的SQL

当需要逻辑删除的时候,不需要额外编写update语句去更新,直接使用gorm中封装的Delete即可。

// Delete - 删除 product db.Debug().Delete(&product)