package initialize import ( "fmt" "kra/internal/conf" _ "github.com/go-sql-driver/mysql" "gorm.io/driver/mysql" "gorm.io/gorm" ) // GormMysql 初始化MySQL数据库 func GormMysql(m *conf.Mysql) (*gorm.DB, error) { if m == nil || m.DbName == "" { return nil, fmt.Errorf("mysql config is empty") } return initMysqlDatabase(m) } // GormMysqlByConfig 通过传入配置初始化MySQL数据库 func GormMysqlByConfig(m *conf.Mysql) (*gorm.DB, error) { return initMysqlDatabase(m) } // initMysqlDatabase 初始化MySQL数据库的辅助函数 func initMysqlDatabase(m *conf.Mysql) (*gorm.DB, error) { if m.DbName == "" { return nil, nil } dsn := MysqlDsn(m) mysqlConfig := mysql.Config{ DSN: dsn, DefaultStringSize: 191, SkipInitializeWithVersion: false, } gormConfig := GormConfig(m.Prefix, m.Singular, m.LogMode) db, err := gorm.Open(mysql.New(mysqlConfig), gormConfig) if err != nil { return nil, err } if m.Engine != "" { db.InstanceSet("gorm:table_options", "ENGINE="+m.Engine) } sqlDB, err := db.DB() if err != nil { return nil, err } sqlDB.SetMaxIdleConns(int(m.MaxIdleConns)) sqlDB.SetMaxOpenConns(int(m.MaxOpenConns)) return db, nil } // MysqlDsn 生成MySQL DSN func MysqlDsn(m *conf.Mysql) string { return fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?%s", m.Username, m.Password, m.Path, m.Port, m.DbName, m.Config) }