基于GORM的MySQL数据库连接管理器设计与实现
前言
在Go语言开发中,数据库连接管理是任何后端应用的核心组件。一个高效、稳定的数据库连接管理器能够显著提升应用性能并降低资源消耗。本文将详细介绍一个基于GORM的企业级MySQL数据库连接解决方案,它具有连接池配置、自动解析时间类型、预编译SQL等特性,并配合完整的配置系统实现灵活管理。
一、核心设计理念
完整代码:
package core
/**
@author 阿贵
MySQL数据库连接管理器
特性:
1.支持连接池配置(最大空闲/活跃连接数)
2.自动解析时间类型字段
3.预编译SQL提升性能
4.禁用默认事务提升效率
5.完善的错误处理机制
*/
import (
"your_project/config"
"your_project/global"
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"time"
)
// Db 全局数据库实例
var Db *gorm.DB
// MysqlInit 初始化MySQL数据库连接
func MysqlInit() error {
dbConfig := config.AppConfig.Mysql
// 构建DSN连接字符串
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=True&loc=Local",
dbConfig.Username,
dbConfig.Password,
dbConfig.Host,
dbConfig.Port,
dbConfig.Hostname,
dbConfig.Charset)
// 初始化GORM连接
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: logger.Default.LogMode(logger.Info),
DisableForeignKeyConstraintWhenMigrating: true, // 迁移时禁用外键约束
PrepareStmt: true, // 开启预编译提升性能
SkipDefaultTransaction: true, // 禁用默认事务
})
if err != nil {
return fmt.Errorf("数据库连接失败:%w", err)
}
// 获取底层sql.DB连接池
sqlDb, err := db.DB()
if err != nil {
return fmt.Errorf("获取数据库连接池失败:%w", err)
}
// 配置连接池参数
sqlDb.SetMaxIdleConns(dbConfig.MaxIdle) // 最大空闲连接数
sqlDb.SetMaxOpenConns(dbConfig.MaxOpen) // 最大打开连接数
sqlDb.SetConnMaxLifetime(time.Hour) // 连接最大存活时间
// 测试数据库连接
if err := sqlDb.Ping(); err != nil {
return fmt.Errorf("数据库连接测试失败:%w", err)
}
Db =

最低0.47元/天 解锁文章
914

被折叠的 条评论
为什么被折叠?



