61 lines
1.5 KiB
Go
61 lines
1.5 KiB
Go
package gormx
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"gorm.io/driver/mysql"
|
|
"gorm.io/driver/sqlite"
|
|
"gorm.io/gorm"
|
|
"gorm.io/gorm/schema"
|
|
)
|
|
|
|
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")
|
|
}
|
|
|
|
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)
|
|
dialector = mysql.Open(dsn)
|
|
|
|
} 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{
|
|
NamingStrategy: schema.NamingStrategy{
|
|
TablePrefix: defaultOpts.Prefix, // 表名前缀,`Article` 的表名应该是 `it_articles`
|
|
SingularTable: defaultOpts.SingularTable, // 使用单数表名,启用该选项,此时,`Article` 的表名应该是 `it_article`
|
|
},
|
|
Logger: NewGormxLogger(context.TODO()),
|
|
})
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
// 连接池设置
|
|
// sqlDB, _ := db.DB()
|
|
// sqlDB.SetMaxIdleConns(m.MaxIdleConns)
|
|
// sqlDB.SetMaxOpenConns(m.MaxOpenConns)
|
|
|
|
return db
|
|
}
|