gorm 数据库表模型声明 - 基础
链接数据库
1
2
3
4
5
6
7
8
9
10
| import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func main() {
// refer https://github.com/go-sql-driver/mysql#dsn-data-source-name for details
dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
}
|
常用字段类型与 gorm
默认字段类型
varchar, int, datetime, timestamp
表定义如下
1
2
3
4
5
| type Author struct {
gorm.Model
Name string
Password string
}
|
auto migrate 后, 可以看到 name, password
默认使用的是 longtext
类型。
1
2
3
4
5
6
7
8
9
10
11
12
| show create table authors;
CREATE TABLE `authors` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`created_at` datetime(3) DEFAULT NULL,
`updated_at` datetime(3) DEFAULT NULL,
`deleted_at` datetime(3) DEFAULT NULL,
`name` longtext,
`password` longtext,
PRIMARY KEY (`id`),
KEY `idx_authors_deleted_at` (`deleted_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
|
声明表结构
官方文档:
https://gorm.io/docs/models.html#Fields-Tags
声明 mysql 表结构时, 遵从一下原则
- 使用
gorm
tag - tag 中多个字段以
分号 ;
分割。 - 字段内部以
冒号 :
分割。
1
2
3
4
5
6
| type Author struct {
gorm.Model
Name string `gorm:"index;type:varchar(32);comment:用户昵称"`
Password string `gorm:"type:varchar(32);comment:用户密码"`
}
|
外键声明
官方文档:
- https://gorm.io/docs/associations.html#tags
- https://gorm.io/docs/belongs_to.html#Override-Foreign-Key
1
2
3
4
5
6
7
8
| type Post struct {
gorm.Model
Title string `gorm:"type:varchar(128);index"`
Content string `gorm:"longtext"`
AuthorID int `gorm:"bigint"` // 外键字段
Author Author `gorm:"foreignKey:AuthorID"` // 外键关联的表结构, foreign key 指定关联字段
}
|
设置表属
https://jasperxu.com/gorm-zh/database.html#dbc