66 lines
1.4 KiB
Go
66 lines
1.4 KiB
Go
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)
|
|
}
|