这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天
1. 约定而不是配置
gorm更偏向于约定,比如说ID作为主键,结构体名称的复数就作为表的名称(当然表名的首字母肯定是小写),并且使用CreateAt以及UpdateAt来更新创建和修改的时间。如果遵循gorm的约定的话只需要非常少量的代码配置
2. gorm.Model模型
type Model struct {
ID uint `gorm:"primaryKey"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt gorm.DeletedAt `gorm:"index"`
}
- gorm.Model结构体模型我们可以内嵌到其它结构体当中
- 我们还可以将普通的结构体内嵌到其它结构体当中,比如说下面这个例子
type Author struct {
Name string
Email string
}
type Blog struct {
ID uint
Author Author `gorm:"embedded"` // 这个表示结构体内嵌
}
// 上面的Blog等价与下面的Blog
type Blog struct {
ID uint
Name string
Email string
}
- 还可以给表中的字段名添加前缀,下面举了一个简单的例子
type Blog struct {
ID uint
Author Author `gorm:"embedded, embeddedPrefix:author_"`
}
// 上面的Blog等价与下面的Blog
type Blog struct {
ID uint
AuthorName string // 注意表中的字段对应到结构体中后就要大写,驼峰式命名操作
AuthorEmail string
}
3. gorm中常用的一些tag标签
这个直接参照 gorm.io/docs/models… 文档即可,注意gorm中的tag大小写敏感,习惯上我们会讲第一个单词的首字母小写,其后的单词首字母都大写
1. gorm支持的数据库
- MySQL,
- PostgreSQL
- SQLite
- SQL Server
- TiDB
2. gorm连接mysql示例
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func main() {
// user:用户名
// pass:密码
// @tcp()里面填写mysql服务的地址
// dbname对应自己数据库的名称
// 为了更好的支持utf-8,我们需要指定编码字符集charset为utf8mb4
// 为了处理time.Time类型(比如说内置的gorm.Model模型里面的CreateAt),加上parseTime=True
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。不过时间长了忘得也差不多了emmm......马上要做大项目了最基本的两个gin web框架和gorm数据库连接框架还是要再复习一下。其实就看到这里的话感觉gorm框架和mybatis这类的orm框架都有着异曲同工之妙,无外乎都是数据库的连接,实体类和表的对应,以及常用的CRUD,当然gorm也有自己的一些创新点和很多额外功能,这两天的时间还是要好好看看。