模型定义基础
GORM 通过 Go 结构体映射数据库表,下面介绍模型定义的核心用法。
基础模型
GORM 偏好约定优于配置,结构体默认映射同名复数表。
Go
type User struct {
ID uint `gorm:"primaryKey"`
Name string `gorm:"type:varchar(100);not null"`
Email string `gorm:"type:varchar(100);uniqueIndex"`
Age int
CreatedAt time.Time
UpdatedAt time.Time
}
默认映射规则:
- 结构体
User→ 表名users - 字段
ID或Id→ 自动设为主键 - 字段
CreatedAt、UpdatedAt→ 自动管理时间戳 - 字段名驼峰 → 列名下划线(
CreatedAt→created_at)
gorm.Model 嵌入
gorm.Model 是预定义结构体,包含 ID、CreatedAt、UpdatedAt、DeletedAt 四个字段:
Go
type Model struct {
ID uint `gorm:"primaryKey"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt gorm.DeletedAt `gorm:"index"`
}
使用嵌入语法简化模型定义:
Go
type User struct {
gorm.Model
Name string `gorm:"type:varchar(100);not null"`
Email string `gorm:"type:varchar(100);uniqueIndex"`
Age int
}
嵌入
gorm.Model后自动获得软删除能力(DeletedAt字段),调用db.Delete(&user)时不会物理删除,而是更新deleted_at时间戳。
常用标签
gorm 标签控制列属性:
| 标签 | 说明 |
|---|---|
primaryKey | 设为主键 |
autoIncrement | 自增 |
type:xxx | 指定列类型 |
not null | 非空约束 |
uniqueIndex | 唯一索引 |
default:xxx | 默认值 |
column:xxx | 自定义列名 |
示例:
Go
type Product struct {
gorm.Model
Code string `gorm:"type:varchar(50);uniqueIndex"`
Price float64 `gorm:"type:decimal(10,2);not null"`
Status int `gorm:"default:1;comment:1=上架 0=下架"`
}
要点总结
- 结构体默认映射复数表名,驼峰字段自动转下划线列名
gorm.Model嵌入提供ID、CreatedAt、UpdatedAt、DeletedAt- 嵌入
gorm.Model自动支持软删除 - 使用
gorm标签配置列类型、约束、索引 - 偏好约定可减少标签书写,保持模型简洁
存放路径:D:\git2\jwdev\articles\GORM\入门\GORM 基础概念\模型定义基础.md
📝 发现内容有误?点击此处直接编辑