01
概念
GORM 是一个流行的 Go 语言操作数据库的 ORM。GORM 支持的数据库有 MySQL,PostgreSQL,SQlite,SQL Server。今天(2020/08/31)作者发布了 V2 版本,相比 V1 版本多了一些新特性,和我一起学习 GORM V2 吧。
02
安装
GORM V2 版本,作者更换到的新 Github 仓库。
我们可以使用 Go 工具 go get 安装:
go get -u gorm.io/gorm go get -u gorm.io/driver/sqlite
可能是因为作者刚发布 V2 版本,我使用第三方国内镜像代理安装没有成功,后来改用官方代理安装成功了。
03
连接 MySQL
我们以 MySQL 数据库为例,讲述 GORM 如何连接数据库。
GORM 连接 MySQL 有三种方式,第一种是使用 gorm.Open() 函数直接打开数据库连接来初始化 *gorm.DB;第二种是使用 gorm.Open() 函数通过使用数据库驱动的高级设置来初始化 *gorm.DB;第三种是使用 gorm.Open() 函数通过一个现有的数据库连接来初始化 *gorm.DB。
不管使用哪种方式,都必须导入两个包,数据库驱动包和 gorm 包:
"gorm.io/driver/mysql" "gorm.io/gorm"
其中数据库驱动包,还可以使用自定义数据库驱动。如果感兴趣,可以自己研究,这里不再展开讲解。
GORM 可以使用 Go 语言标准库 sql 包的连接池。
通过代码,我们演示 GORM 连接 MySQL 的三种方式:
方式 1:
dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local" gormDB, err := gorm.Open(mysql.Open(dsn), &gorm.Config{});
方式 2:
db, err := gorm.Open(mysql.New(mysql.Config{ DSN: "gorm:gorm@tcp(127.0.0.1:3306)/gorm?charset=utf8&parseTime=True&loc=Local", // DSN data source name DefaultStringSize: 256, // string 类型字段的默认长度 DisableDatetimePrecision: true, // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持 DontSupportRenameIndex: true, // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引 DontSupportRenameColumn: true, // 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列 SkipInitializeWithVersion: false, // 根据当前 MySQL 版本自动配置 }), &gorm.Config{})
方式 3:
dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local" if sqlDB == nil { sqlDB, _ := sql.Open("mysql", dsn) } gormDB, err := gorm.Open( mysql.New( mysql.Config{ Conn: sqlDB, }, ), &gorm.Config{ SkipDefaultTransaction: true, // 关闭写入操作默认启用事务 DisableAutomaticPing: true, // 关闭自动 Ping 数据库 }, )
需要注意的是,方式 3 需要导入 Go 语言标准库 sql 包。
GORM V2 初始化 *gorm.DB 时调用的 gorm.Open() 函数有两个接收参数,值得一提的是第二个配置信息参数,可以在初始化时进行一些配置,比如 GORM 为了确保数据的一致性,在写操作中默认打开了事务,这样会对性能产生一定的损耗,我们可以根据实际情况,按需选择事务的开启和关闭。因为篇幅原因,如果对其他配置项也感兴趣,可以查阅文档。