主鍵(Primary Key)
GORM默認會使用名爲ID的字段作爲表的主鍵。 type User struct { ID string // 名爲`ID`的字段會默認作爲表的主鍵 Name string } // 使用`AnimalID`作爲主鍵 type Animal struct { AnimalID int64 `gorm:"primary_key"` Name string Age int64 }
表名(Table Name)
表名默認就是結構體名稱的複數,例如:
type User struct {} // 默認表名是`users` // 將User的表名設置爲`profiles` func (user) TableName() string { return "profiles" } func (u User) TableName() string { If u.Role == "admin" { return "admin_users" } else { return "users" } } // 禁用默認表名的複數形式,如果設置爲true,則`User`的默認表名是`user` db.SingularTable(true)
也可以通過Table()指定表名:
// 使用User結構體創建名爲`deleted_users`的表 db.Table("deleted_users").CreateTable(&User{}) var deleted_users []user db.Table("deleted_users").Find(&deleted_users) // SELECT * FROM deleted_users; db.Table("deleted_users").Where("name = ?","jinzhu").Delete() // DELETE FROM deleted_users WHRER name = 'jinzhu'; GORM還支持更改默認表名稱槼則: gorm.DefaultTableNameHandler = func(db *gorm.DB, defaultTableName string) string { return "prefix_" + defaultTableName; }
列名(Column Name)
列名由字段名稱進行下劃線分割來生成。
type User struct { ID unit // column name is `id` Name string // column name is `name` Birthday string // comumn name is `birthday` CreateAt time.Time // column name is `created_at` }
可以使用結構體tag指定列名:
type Animal struct { AnimalID int64 `gorm:"column:beast_id"` // set column name to `beast_id` Birthday time.Time `gorm:"column:day_of_the_beast"` // set column name to `day_of_the_beast` Age int64 `gorm:"column:age_of_the_beast"` // set column name to `age_of_the_beast` }