package database import ( "fmt" "time" "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/logger" ) /* * @ 作者: 秦东 @ 时间: 2024-10-02 16:55:33 @ 功能: 组装连接语句 */ func (m *MasterMysqlSetUp) SqlDsn() (dsnStr string) { dsnStr = fmt.Sprintf("%v:%v@tcp(%v:%v)/%v?charset=%v", m.UserName, m.PassWord, m.UrlPath, m.Port, m.Name, m.Charset) if m.ParseTime { dsnStr = fmt.Sprintf("%v:%v@tcp(%v:%v)/%v?charset=%v&parseTime=%v&loc=%v", m.UserName, m.PassWord, m.UrlPath, m.Port, m.Name, m.Charset, m.ParseTime, m.Loc) } // fmt.Printf("dsnStr:%v\n", dsnStr) return } /* * @ 作者: 秦东 @ 时间: 2024-10-02 16:56:15 @ 功能: 打开数据连接 */ func (m *MasterMysqlSetUp) OpenSql() *gorm.DB { sqlConfig := mysql.Config{ DSN: m.SqlDsn(), // DSN DefaultStringSize: 255, // string 类型字段的默认长度 DisableDatetimePrecision: true, // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持 DontSupportRenameIndex: true, // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引 DontSupportRenameColumn: true, // 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列 SkipInitializeWithVersion: false, // 根据版本自动配置 } if m.GormLog { if opDb, err := gorm.Open(mysql.New(sqlConfig), &gorm.Config{ Logger: logger.Default.LogMode(logger.Info), }); err != nil { return nil } else { sqlDb, _ := opDb.DB() sqlDb.SetMaxIdleConns(m.MaxIdleConns) sqlDb.SetMaxOpenConns(m.MaxOpenConns) sqlDb.SetConnMaxLifetime(5 * time.Minute) return opDb } } else { if opDb, err := gorm.Open(mysql.New(sqlConfig)); err != nil { return nil } else { sqlDb, _ := opDb.DB() sqlDb.SetMaxIdleConns(m.MaxIdleConns) sqlDb.SetMaxOpenConns(m.MaxOpenConns) sqlDb.SetConnMaxLifetime(5 * time.Minute) return opDb } } }