模型定义 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.
模型定义
GORM 通过将 Go 结构体(Go structs) 映射到数据库表来简化数据库交互。 了解如何在GORM中定义模型,是充分利用GORM全部功能的基础。
模型是使用普通结构体定义的。 这些结构体可以包含具有基本Go类型、指针或这些类型的别名,甚至是自定义类型(只需要实现 database/sql
包中的Scanner和Valuer接口)。
考虑以下 user
模型的示例:
type User struct { ID uint // Standard field for the primary key Name string // 一个常规字符串字段 Email *string // 一个指向字符串的指针, allowing for null values Age uint8 // 一个未签名的8位整数 Birthday *time.Time // A pointer to time.Time, can be null MemberNumber sql.NullString // Uses sql.NullString to handle nullable strings ActivatedAt sql.NullTime // Uses sql.NullTime for nullable time fields CreatedAt time.Time // 创建时间(由GORM自动管理) UpdatedAt time.Time // 最后一次更新时间(由GORM自动管理) }
约定
-
主键:GORM 使用一个名为
ID
的字段作为每个模型的默认主键。 -
表名:默认情况下,GORM 将结构体名称转换为
snake_case
并为表名加上复数形式。 例如,一个User
结构体在数据库中的表名变为users
。 -
列名:GORM 自动将结构体字段名称转换为
snake_case
作为数据库中的列名。 -
时间戳字段:GORM使用字段
CreatedAt
和UpdatedAt
来自动跟踪记录的创建和更新时间
gorm.Model
// gorm.Model 的定义 type Model struct { ID uint `gorm:"primaryKey"` CreatedAt time.Time UpdatedAt time.Time DeletedAt gorm.DeletedAt `gorm:"index"` }
GORM提供了一个预定义的结构体,名为gorm.Model
,其中包含常用字段:
-
将其嵌入在您的结构体中: 您可以直接在您的结构体中嵌入
gorm.Model
,以便自动包含这些字段。 这对于在不同模型之间保持一致性并利用GORM内置的约定非常有用,请参考嵌入结构。 -
包含的字段:
ID
:每个记录的唯一标识符(主键)。CreatedAt
:在创建记录时自动设置为当前时间。UpdatedAt
:每当记录更新时,自动更新为当前时间。DeletedAt
:用于软删除(将记录标记为已删除,而实际上并未从数据库中删除)