exhibition-register/pkg/db/mysql.go

71 lines
1.8 KiB
Go
Raw Normal View History

2024-01-29 09:02:58 +00:00
package db
import (
2024-01-30 03:52:56 +00:00
"exhibition-register/internal/model"
2025-03-10 07:18:11 +00:00
"fmt"
"time"
2024-01-29 09:02:58 +00:00
"github.com/gin-gonic/gin"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"gorm.io/gorm/schema"
)
func loadMysqlConn(conn string) *gorm.DB {
var ormLogger logger.Interface
if gin.Mode() == "debug" {
ormLogger = logger.Default.LogMode(logger.Info)
} else {
ormLogger = logger.Default
}
db, err := gorm.Open(mysql.New(mysql.Config{
DSN: conn, // DSN data source name
DefaultStringSize: 256, // string 类型字段的默认长度
DisableDatetimePrecision: true, // 禁用 datetime 精度MySQL 5.6 之前的数据库不支持
DontSupportRenameIndex: true, // 重命名索引时采用删除并新建的方式MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引
DontSupportRenameColumn: true, // 用 `change` 重命名列MySQL 8 之前的数据库和 MariaDB 不支持重命名列
SkipInitializeWithVersion: false, // 根据版本自动配置
}), &gorm.Config{
Logger: ormLogger,
NamingStrategy: schema.NamingStrategy{
SingularTable: true,
},
DisableForeignKeyConstraintWhenMigrating: true,
})
if err != nil {
panic(err)
}
sqlDB, _ := db.DB()
sqlDB.SetMaxIdleConns(20) //设置连接池,空闲
sqlDB.SetMaxOpenConns(100) //打开
sqlDB.SetConnMaxLifetime(time.Second * 30)
2024-09-10 03:17:44 +00:00
err = db.AutoMigrate(&model.RegisterRecord{}) //自迁移
2024-01-29 09:02:58 +00:00
if err != nil {
return nil
}
return db
}
func addColumn(db *gorm.DB, dst interface{}, column string) {
exist := db.Migrator().HasColumn(dst, column)
if !exist {
err := db.Migrator().AddColumn(dst, column)
if err != nil {
panic(err)
}
}
return
}
func addTable(db *gorm.DB, dst interface{}) {
2025-03-10 07:18:11 +00:00
if db.Migrator().HasTable(dst) == false {
if err := db.Migrator().CreateTable(dst); err != nil {
fmt.Println(err)
return
}
}
2024-01-29 09:02:58 +00:00
return
}