package initialize import ( "fmt" "kra/internal/conf" "gorm.io/driver/sqlserver" "gorm.io/gorm" ) // GormMssql 初始化MSSQL数据库 func GormMssql(m *conf.Mssql) (*gorm.DB, error) { if m == nil || m.DbName == "" { return nil, fmt.Errorf("mssql config is empty") } return initMssqlDatabase(m) } // GormMssqlByConfig 通过传入配置初始化MSSQL数据库 func GormMssqlByConfig(m *conf.Mssql) (*gorm.DB, error) { return initMssqlDatabase(m) } // initMssqlDatabase 初始化MSSQL数据库的辅助函数 func initMssqlDatabase(m *conf.Mssql) (*gorm.DB, error) { if m.DbName == "" { return nil, nil } dsn := MssqlDsn(m) mssqlConfig := sqlserver.Config{ DSN: dsn, DefaultStringSize: 191, } gormConfig := GormConfig(m.Prefix, m.Singular, m.LogMode) db, err := gorm.Open(sqlserver.New(mssqlConfig), 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 } // MssqlDsn 生成MSSQL DSN func MssqlDsn(m *conf.Mssql) string { return fmt.Sprintf("sqlserver://%s:%s@%s:%s?database=%s&%s", m.Username, m.Password, m.Path, m.Port, m.DbName, m.Config) }