Go 语言 Gorm 框架的使用 | 青训营笔记

87 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天

GORM 框架的使用

GORM 是 Go 语言中一个已经迭代数十年且功能强大、性能极好的 ORM 框架

ORM:Object Relational Mapping(对象关系映射),其主要作用是在编程中,把面向对象的概念跟数据库中表的概念对应起来

连接到数据库

要想使用 ORM 框架,第一件事情自然是连接上数据库,框架才能发挥作用。

GORM 官方支持的数据库类型有: MySQL, PostgreSQL, SQlite, SQL Server, 这里使用我最常用的 MySQL 来进行学习。在终端中执行以下命令,以获取 gorm 框架与 MySQL 驱动包

go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql

再创建一个 go 文件,加入以下代码

import (
  "gorm.io/driver/mysql"
  "gorm.io/gorm"
)

func main() {
        //...
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local&timeout=%s", username, password, host, port, Dbname, timeout)
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		log.WithError(err).Panic("failed to connect database")
	}
 }

这样就创建了一个与数据库的连接 db 在之后的 CURD 操作中,我们都要使用这个 db 来执行操作。

另外,如果要在项目中使用,可以为其创建一个单例模式,在程序启动时对 db 初始化,之后都使用一个 Get 方法来获取数据库连接。

模型定义

第二步要定义模型,模型由 Go 的基本数据类型、和实现了 Scanner 和 Valuer 接口的自定义类型及其指针或别名组成,例如下面这个 User 结构体

 type User struct {  
  ID           uint  
  Name         string  
  Email        *string  
  Age          uint8  
  Birthday     *time.Time  
  MemberNumber sql.NullString  
  ActivatedAt  sql.NullTime  
  CreatedAt    time.Time  
  UpdatedAt    time.Time  
}

约定

与 Java 中的 MyBatis 类似,GORM 也提供了很多默认的约定,只要我们遵循这些约定定义模型,那么我们将省略很多繁琐的的配置。如果约定不符合我们的习惯,那么我们也可以单独去设置。

GORM 倾向于约定优于配置默认情况下,GORM 使用 ID 作为主键,使用结构体名的蛇形复数作为表名,字段名的蛇形作为列名,并使用 CreatedAtUpdatedAt 字段追踪创建、更新时间。