80 lines
1.9 KiB
Go
80 lines
1.9 KiB
Go
package orm
|
||
|
||
import (
|
||
"Edu/config"
|
||
"Edu/serve/orm/logic"
|
||
"fmt"
|
||
"log"
|
||
"os"
|
||
"time"
|
||
|
||
"gorm.io/gorm/logger"
|
||
"gorm.io/gorm/schema"
|
||
|
||
"gorm.io/gorm"
|
||
)
|
||
|
||
var (
|
||
orm *gorm.DB
|
||
|
||
engines = map[string]func() logic.IEngine{
|
||
"mysql": mysql, "sqlite": sqlite,
|
||
}
|
||
)
|
||
|
||
func mysql() logic.IEngine {
|
||
return &logic.Mysql{
|
||
User: config.SettingInfo.Engine.Mysql.User, Password: config.SettingInfo.Engine.Mysql.Password,
|
||
Host: config.SettingInfo.Engine.Mysql.Host, Port: config.SettingInfo.Engine.Mysql.Port,
|
||
DBName: config.SettingInfo.Engine.Mysql.DBName, Parameters: config.SettingInfo.Engine.Mysql.Parameters,
|
||
}
|
||
}
|
||
|
||
func sqlite() logic.IEngine {
|
||
return &logic.Sqlite{Path: config.SettingInfo.Engine.Sqlite.Path, Name: config.SettingInfo.Engine.Sqlite.Name}
|
||
}
|
||
|
||
func Init() {
|
||
handle, has := engines[config.SettingInfo.Engine.DBMode]
|
||
|
||
if !has {
|
||
panic(fmt.Sprintf("Unknown Engine Mode:%d", config.SettingInfo.Engine.DBMode))
|
||
}
|
||
option := &gorm.Config{
|
||
DisableForeignKeyConstraintWhenMigrating: true,
|
||
NamingStrategy: schema.NamingStrategy{
|
||
TablePrefix: config.SettingInfo.Engine.TablePrefix,
|
||
SingularTable: !config.SettingInfo.Engine.Complex,
|
||
},
|
||
}
|
||
if config.SettingInfo.Engine.Debug {
|
||
option.Logger = logger.New(
|
||
log.New(os.Stdout, "\r\n", log.LstdFlags),
|
||
logger.Config{
|
||
SlowThreshold: time.Second,
|
||
LogLevel: logger.Info,
|
||
Colorful: false,
|
||
IgnoreRecordNotFoundError: true,
|
||
},
|
||
)
|
||
}
|
||
db, err := gorm.Open(handle().DSN(), option)
|
||
|
||
if err != nil {
|
||
panic("Orm Open Error:" + err.Error())
|
||
}
|
||
_db, _ := db.DB()
|
||
_db.SetMaxIdleConns(config.SettingInfo.Engine.MaxIdleConns)
|
||
_db.SetMaxOpenConns(config.SettingInfo.Engine.MaxOpenConns)
|
||
_db.SetConnMaxLifetime(time.Duration(config.SettingInfo.Engine.MaxLifetime) * time.Second)
|
||
|
||
orm = db
|
||
}
|
||
|
||
func GetDB() *gorm.DB {
|
||
if _, err := orm.DB(); err != nil {
|
||
Init()
|
||
}
|
||
return orm
|
||
}
|