This repository has been archived on 2026-04-05. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
Exam_registration/internal/dao/mysql.go
2026-03-20 21:41:00 +08:00

63 lines
1.5 KiB
Go

package dao
import (
"exam_registration/internal/model"
"fmt"
"github.com/spf13/viper"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"time"
)
var DB *gorm.DB
func InitMySQL(config *viper.Viper) error {
host := config.GetString("database.host")
port := config.GetString("database.port")
user := config.GetString("database.user")
password := config.GetString("database.password")
dbname := config.GetString("database.dbname")
charset := config.GetString("database.charset")
maxIdleConns := config.GetInt("database.max_idle_conns")
maxOpenConns := config.GetInt("database.max_open_conns")
connMaxLifetime := config.GetInt("database.conn_max_lifetime")
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&parseTime=True&loc=Local",
user, password, host, port, dbname, charset)
var err error
DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: logger.Default.LogMode(logger.Info),
})
if err != nil {
return fmt.Errorf("failed to connect database: %w", err)
}
// 配置连接池
sqlDB, err := DB.DB()
if err != nil {
return fmt.Errorf("failed to get sql.DB: %w", err)
}
sqlDB.SetMaxIdleConns(maxIdleConns)
sqlDB.SetMaxOpenConns(maxOpenConns)
sqlDB.SetConnMaxLifetime(time.Duration(connMaxLifetime) * time.Second)
// 自动迁移表结构
err = DB.AutoMigrate(
&model.User{},
&model.Exam{},
&model.ExamRegistration{},
&model.ExamNotice{},
&model.ExamScore{},
)
if err != nil {
return fmt.Errorf("failed to auto migrate: %w", err)
}
return nil
}