Files
gormx/gormx.go
T

61 lines
1.5 KiB
Go
Raw Normal View History

2023-12-27 19:10:09 +08:00
package gormx
import (
"context"
"fmt"
"gorm.io/driver/mysql"
2024-01-10 23:08:32 +08:00
"gorm.io/driver/sqlite"
2023-12-27 19:10:09 +08:00
"gorm.io/gorm"
"gorm.io/gorm/schema"
)
2024-01-10 23:08:32 +08:00
func NewGorm(opts ...Option) *gorm.DB {
defaultOpts := defaultOptions()
for _, apply := range opts {
apply(&defaultOpts)
}
if defaultOpts.Db == "" {
panic("db is empty")
}
var dialector gorm.Dialector
if defaultOpts.Db == "mysql" {
if defaultOpts.Mysql == nil {
panic("mysql is not supported")
}
2024-04-06 18:22:44 +08:00
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
defaultOpts.Mysql.User,
defaultOpts.Mysql.Password,
defaultOpts.Mysql.Host,
defaultOpts.Mysql.Port,
defaultOpts.Mysql.Database)
2024-01-10 23:08:32 +08:00
dialector = mysql.Open(dsn)
2023-12-27 19:10:09 +08:00
2024-01-10 23:08:32 +08:00
} else if defaultOpts.Db == "sqlite" {
if defaultOpts.Sqlite == nil {
panic("sqlite is not supported")
}
dialector = sqlite.Open(defaultOpts.Sqlite.DbPath)
}
db, err := gorm.Open(dialector, &gorm.Config{
2023-12-27 19:10:09 +08:00
NamingStrategy: schema.NamingStrategy{
2024-01-10 23:08:32 +08:00
TablePrefix: defaultOpts.Prefix, // 表名前缀,`Article` 的表名应该是 `it_articles`
SingularTable: defaultOpts.SingularTable, // 使用单数表名,启用该选项,此时,`Article` 的表名应该是 `it_article`
2023-12-27 19:10:09 +08:00
},
Logger: NewGormxLogger(context.TODO()),
})
if err != nil {
panic(err)
}
2024-01-10 23:08:32 +08:00
// 连接池设置
// sqlDB, _ := db.DB()
// sqlDB.SetMaxIdleConns(m.MaxIdleConns)
// sqlDB.SetMaxOpenConns(m.MaxOpenConns)
return db
2023-12-27 19:10:09 +08:00
}