go
import (
"fmt"
"gin-blog/config"
"gin-blog/model"
"log"
"time"
"gorm.io/driver/mysql"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"gorm.io/gorm/schema"
)
func InitSQLiteDB(dsn string) *gorm.DB {
if dsn == "" {
dsn = "dev.db"
}
db, err := gorm.Open(sqlite.Open(dsn), gormConfig())
if err != nil {
log.Fatal("SQLite 连接失败, 请检查参数")
}
log.Println("SQLite 连接成功")
// MakeMigrate(db)
return db
}
func InitMySQLDB() *gorm.DB {
mysqlCfg := config.Cfg.Mysql
dns := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
mysqlCfg.Username,
mysqlCfg.Password,
mysqlCfg.Host,
mysqlCfg.Port,
mysqlCfg.Dbname,
)
db, err := gorm.Open(mysql.Open(dns), gormConfig())
if err != nil {
log.Fatal("MySQL 连接失败, 请检查参数")
}
log.Println("MySQL 连接成功")
// 迁移数据表,在没有数据表结构变更时候,建议注释不执行
// MakeMigrate(db)
sqlDB, _ := db.DB()
sqlDB.SetMaxIdleConns(10) // 设置连接池中的最大闲置连接
sqlDB.SetMaxOpenConns(100) // 设置数据库的最大连接数量
sqlDB.SetConnMaxLifetime(10 * time.Second) // 设置连接的最大可复用时间
return db
}
func gormConfig() *gorm.Config {
return &gorm.Config{
// gorm 日志模式
Logger: logger.Default.LogMode(getLogMode(config.Cfg.Mysql.LogMode)),
// 禁用外键约束
DisableForeignKeyConstraintWhenMigrating: true,
// 禁用默认事务(提高运行速度)
SkipDefaultTransaction: true,
NamingStrategy: schema.NamingStrategy{
// 使用单数表名,启用该选项,此时,`User` 的表名应该是 `user`
SingularTable: true,
},
}
}
本文作者:yowayimono
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!