
gorm真实项目开发
AI提示词:我给你一个sql建表语句,你给我生成一份go的DO代码和Dao层的代码。支持json解析和gorm
我们都知道 gorm就是个orm的框架,那么它是如何和表给映射的呢?
比如,表名字叫 users
, 对应的结构体 就是 user
, 这是因为 GORM 的默认命名约定导致的。
- 实体类名(结构体名) 采用帕斯卡命名法(首字母大写,如
User
、Article
),符合 Go 的结构体命名规范。 - 表名默认是实体类名的复数形式(且全小写),这是因为数据库表名通常用复数表示“多条记录的集合”(如
users
表示多个用户,articles
表示多篇文章)。
GORM 的表名转换规则:
- 将结构体名(如
User
)转为小写(user
)。 - 自动添加复数后缀(
user
→users
)。
如果我们不想这样怎么办?
- 通过结构体标签
gorm:"tableName"
指定
go
type User struct {
gorm.Model
Name string
} `gorm:"tableName:t_user"` // 表名强制设为 t_user
- 实现
Tabler
接口(推荐)
GORM v2 及以上支持通过接口自定义表名,更灵活:
go
package model
type User struct {
ID int64 `gorm:"column:id;primaryKey"`
Name string `gorm:"column:name"`
Email string `gorm:"column:email;uniqueIndex"`
Age int `gorm:"column:age"`
CreatedAt string `gorm:"column:created_at"`
UpdatedAt string `gorm:"column:updated_at"`
}
// 实现 Tabler 接口,返回自定义表名
func (User) TableName() string {
return "t_user"
}