49 lines
1.1 KiB
Go
49 lines
1.1 KiB
Go
package utils
|
||
|
||
import (
|
||
"Quincy_admin/config"
|
||
"fmt"
|
||
"log"
|
||
"sync"
|
||
|
||
"github.com/gin-gonic/gin"
|
||
_ "github.com/go-sql-driver/mysql" // MySQL驱动
|
||
"github.com/jmoiron/sqlx"
|
||
)
|
||
|
||
var db *sqlx.DB // 全局数据库连接实例,使用sqlx.DB替代sql.DB
|
||
var once sync.Once // 确保初始化只执行一次
|
||
|
||
// InitDB 初始化数据库连接
|
||
func InitDB(cfg *config.Config) (*sqlx.DB, error) {
|
||
var err error
|
||
once.Do(func() {
|
||
// 构建数据库连接字符串 - 添加时区参数
|
||
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?parseTime=true&loc=Asia%%2FShanghai",
|
||
cfg.DB.User, cfg.DB.Password, cfg.DB.Host, cfg.DB.Port, cfg.DB.Name)
|
||
|
||
// 使用sqlx.Open替代sql.Open
|
||
db, err = sqlx.Open("mysql", dsn)
|
||
if err != nil {
|
||
log.Fatalf("Error opening database: %v", err)
|
||
}
|
||
|
||
// 测试数据库连接
|
||
err = db.Ping()
|
||
if err != nil {
|
||
log.Fatalf("Error connecting to database: %v", err)
|
||
}
|
||
|
||
// 设置连接池参数
|
||
db.SetMaxOpenConns(20) // 最大打开连接数
|
||
db.SetMaxIdleConns(10) // 最大空闲连接数
|
||
})
|
||
|
||
return db, err
|
||
}
|
||
|
||
// GetDB 从上下文中获取数据库连接
|
||
func GetDB(c *gin.Context) *sqlx.DB {
|
||
return db
|
||
}
|