命名约定与映射规则
GORM 默认使用蛇形命名(snake_case)规则将 Go 结构体映射到数据库表和列。
默认命名规则
表名映射
GORM 将结构体名转为蛇形命名并加复数后缀作为表名:
Go
type User struct{} // -> users
type UserProfile struct{} // -> user_profiles
type Order struct{} // -> orders
列名映射
GORM 将字段名转为蛇形命名作为列名:
Go
type User struct {
ID uint // -> id
UserName string // -> user_name
CreatedAt time.Time // -> created_at
IsVIP bool // -> is_vip
}
自定义表名
实现 TableName() 方法自定义表名:
Go
type User struct {
ID uint
Name string
}
// 自定义表名
func (User) TableName() string {
return "t_user"
}
自定义列名
使用 column 标签自定义列名:
Go
type User struct {
ID uint `gorm:"column:uid"`
UserName string `gorm:"column:u_name"`
CreatedAt time.Time `gorm:"column:create_time"`
}
关闭复数表名
Go
// 禁用表名复数化
db.NamingStrategy = schema.NamingStrategy{
TablePrefix: "",
SingularTable: true, // 单数模式
}
type User struct{} // -> user(而非 users)
命名策略配置
Go
db.NamingStrategy = schema.NamingStrategy{
TablePrefix: "t_", // 表前缀
SingularTable: true, // 单数表名
NoLowerCase: false, // 是否关闭蛇形命名
}
映射规则速查
| Go 结构体 | 默认表名 | 默认列名规则 |
|---|---|---|
| User | users | id |
| UserProfile | user_profiles | user_id, user_name |
| Order | orders | order_no |
| Product | products | product_name |
注意事项
- GORM 默认使用蛇形命名 + 复数表名
- 可通过 TableName() 方法完全覆盖表名
- column 标签优先级高于默认规则
- NamingStrategy 支持全局配置命名行为
要点总结
| 配置项 | 默认行为 | 自定义方式 |
|---|---|---|
| 表名 | 蛇形 + 复数 | TableName() 方法 |
| 列名 | 蛇形 | column 标签 |
| 全局规则 | NamingStrategy | db.NamingStrategy 配置 |
存放路径:D:\git2\jwdev\articles\GORM\入门\模型标签与字段配置\命名约定与映射规则.md
📝 发现内容有误?点击此处直接编辑