数据库连接与配置
GORM 通过 gorm.Open 统一接口连接各类数据库,下面梳理标准用法。
连接数据库
gorm.Open 接收数据库驱动实例和可选配置项,返回 *gorm.DB 实例。
MySQL 连接
Go
import (
"gorm.io/gorm"
"gorm.io/driver/mysql"
)
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{})
if err != nil {
panic("连接失败: " + err.Error())
}
PostgreSQL 连接
Go
import (
"gorm.io/gorm"
"gorm.io/driver/postgres"
)
dsn := "host=localhost user=postgres password=postgres dbname=mydb port=5432 sslmode=disable TimeZone=Asia/Shanghai"
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
SQLite 连接
Go
import (
"gorm.io/gorm"
"gorm.io/driver/sqlite"
)
db, err := gorm.Open(sqlite.Open("mydb.sqlite"), &gorm.Config{})
连接池配置
通过 sql.DB 底层对象配置连接池参数:
Go
sqlDB, err := db.DB()
if err != nil {
panic(err)
}
// 设置最大空闲连接数
sqlDB.SetMaxIdleConns(10)
// 设置最大打开连接数
sqlDB.SetMaxOpenConns(100)
// 设置连接最大存活时间
sqlDB.SetConnMaxLifetime(time.Hour)
不配置连接池时,默认使用 Go
database/sql的默认值,生产环境建议显式设置。
通用配置
gorm.Config 支持常用配置项:
Go
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
// 禁用嵌套事务
DisableNestedTransaction: false,
// 准备语句模式(预编译)
PrepareStmt: true,
// 查询时自动转义表名和列名
NamingStrategy: schema.NamingStrategy{
TablePrefix: "t_",
SingularTable: true,
},
})
DSN 中的
parseTime=True在 MySQL 中是必须的,否则time.Time字段会解析失败。
要点总结
gorm.Open是统一连接入口,接收驱动实例和配置- 不同数据库使用对应驱动的
Open(dsn)方法 - 连接池通过
db.DB()获取sql.DB后配置 - MySQL DSN 必须包含
parseTime=True以支持时间类型 - 生产环境建议显式配置连接池与命名策略
存放路径:D:\git2\jwdev\articles\GORM\入门\GORM 基础概念\数据库连接与配置.md
📝 发现内容有误?点击此处直接编辑