前一章节中我们已经演示了使用GORM建立MySQL数据库连接的例子代码,实际上建立数据库连接时还有一些可选的配置项,这篇笔记我们简单介绍一下。GORM官方支持的数据库类型包括MySQL、PostgreSQL、SQLite、SQL Server和TiDB,该篇介绍的内容适用于MySQL数据库。
下面例子代码中我们编写了一个函数用于创建数据库连接。
conf/db.go
package conf
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
var Db *gorm.DB
func InitDb() {
dsn := "root:root@tcp(127.0.0.1:3306)/netstore?charset=utf8mb4&parseTime=true&loc=Local"
conn, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic(err)
}
Db = conn
}
代码中,我们将建立数据库连接的代码单独抽取到了conf/db.go
中,这样在其它包中直接引用conf.Db
即可执行增删改查操作。
GORM底层使用了数据库连接池,连接池具有一些默认参数,我们也可以手动对其进行配置,下面是一个例子。
conf/db.go
package conf
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
var Db *gorm.DB
func InitDb() {
dsn := "root:root@tcp(127.0.0.1:3306)/netstore?charset=utf8mb4&parseTime=true&loc=Local"
conn, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic(err)
}
sqlDb, err := conn.DB()
if err != nil {
panic(err)
}
sqlDb.SetMaxIdleConns(10)
sqlDb.SetMaxOpenConns(100)
sqlDb.SetConnMaxLifetime(0)
Db = conn
}
maxIdleConns
:连接池中保留的空闲连接数,默认值10
maxOpenConns
:连接池中的最大连接数,默认值100
connMaxLifetime
:连接最大存活时间,默认值0
即无限时间GORM中创建连接时,我们可以用Config
结构体指定一些配置信息,这里我们介绍一些常用配置。
Logger
字段可以指定GORM的日志记录器,常用于指定日志级别。下面例子代码中我们指定GORM使用INFO
级别输出日志,该日志级别下GORM会输出执行的SQL语句,对于我们调试有些帮助。
conn, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: logger.Default.LogMode(logger.Info),
})
PrepareStmt
用于指定GROM是否使用预编译SQL语句,默认值为false
。开启后GORM会启用并缓存SQL预编译语句,一般来说都建议开启。
conn, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
PrepareStmt: true,
})