这是我参与「第五届青训营 」伴学笔记创作活动的第 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 作为主键,使用结构体名的蛇形复数作为表名,字段名的蛇形作为列名,并使用 CreatedAt、UpdatedAt 字段追踪创建、更新时间。