Gorm应用问题汇总
官网网址:gorm.io
特性
- 关联(Has One, Has Many, Belongs To, Many to Many,多态,单表继承)
- Create, Save, Update, Delete, Find 中钩子方法
- 支持Preload,joins的预加载
- Auto Migration
模型定义
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自动管理)
}
- 指向 *string 和 *time.Time 类型的指针表示可空字段。
创建/更新时间追踪(纳秒、毫秒、秒、Time)
type User struct {
CreatedAt time.Time // 在创建时,如果该字段值为零值,则使用当前时间填充
UpdatedAt int // 在创建时该字段值为零值或者在更新时,使用当前时间戳秒数填充
Updated int64 `gorm:"autoUpdateTime:nano"` // 使用时间戳纳秒数填充更新时间
Updated int64 `gorm:"autoUpdateTime:milli"` // 使用时间戳毫秒数填充更新时间
Created int64 `gorm:"autoCreateTime"` // 使用时间戳秒数填充创建时间
}
字段标签
- clolumn - 指定db列明
- type - 列数据类型
- 列数据类型,推荐使用兼容性好的通用类型,例如:所有数据库都支持 bool、int、uint、float、string、time、bytes 并且可以和其他标签一起使用,例如:not null、size, autoIncrement… 像 varbinary(8) 这样指定数据库数据类型也是支持的。在使用指定数据库数据类型时,它需要是完整的数据库数据类型,如:MEDIUMINT UNSIGNED not NULL AUTO_INCREMENT
- serializer - 序列化或反序列化
- size - 长度
- primaryKey - 将列定义为主键
- unique - 将列定义为唯一键
- default - 定义列的默认值
- precision - 列的精度
- scale - 列大小
- not null -
- autoIncrement - 列自动增长
- autoIncrementIncrement - 自动步长,控制连续记录之间的间隔
- embedded - 嵌套字段
- embeddedPrefix - 嵌套字段的列前缀
- autoCreateTime -
- autoUpdateTime
- index - 根据参数创建索引
- uniqueIndex - 与index相同,但创建的是唯一索引
- check
- <-
- ->
-
复合主键
通过将多个字段设为主键,以创建复合主键,例如:
type Product struct {
ID string `gorm:"primaryKey"`
LanguageCode string `gorm:"primaryKey"`
Code string
Name string
}
注意:默认情况下,整型 PrioritizedPrimaryField 启用了 AutoIncrement,要禁用它,您需要为整型字段关闭 autoIncrement:
type Product struct {
CategoryID uint64 `gorm:"primaryKey;autoIncrement:false"`
TypeID uint64 `gorm:"primaryKey;autoIncrement:false"`
}