gorm学习 | 青训营笔记

72 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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"`
}
  1. gorm.Model结构体模型我们可以内嵌到其它结构体当中
  2. 我们还可以将普通的结构体内嵌到其它结构体当中,比如说下面这个例子
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 
}
  1. 还可以给表中的字段名添加前缀,下面举了一个简单的例子
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支持的数据库

  1. MySQL,
  2. PostgreSQL
  3. SQLite
  4. SQL Server
  5. 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也有自己的一些创新点和很多额外功能,这两天的时间还是要好好看看。