89 lines
1.8 KiB
Go
Raw Normal View History

2024-12-17 22:28:48 +08:00
package myGorm
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"log"
"os"
"strings"
"time"
)
type SimpleORM struct {
user string
password string
host string
name string
charset string
runMode string
loggerConfig logger.Config
loggerLevel string
}
func NewSimpleORM(user string, password string, host string, name string, charset string, runMode string) *SimpleORM {
orm := &SimpleORM{
user: user,
password: password,
host: host,
name: name,
charset: charset,
runMode: runMode,
loggerConfig: logger.Config{
SlowThreshold: time.Second, // 慢 SQL 阈值
Colorful: false, // 禁用彩色打印
LogLevel: logger.Info,
},
}
if runMode == "release" {
orm.loggerConfig.LogLevel = logger.Silent
}
return orm
}
func (t *SimpleORM) getDSN() string {
if t.charset == "" {
t.charset = "utf8mb4"
}
return fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=%s&parseTime=True&loc=Local",
t.user,
t.password,
t.host,
t.name,
t.charset,
)
}
func (t *SimpleORM) SetLoggerConfig(l logger.Config) {
t.loggerConfig = l
}
func (t *SimpleORM) SetLoggerLevel(level string) {
if strings.ToLower(level) == "silent" {
t.loggerConfig.LogLevel = logger.Silent
} else if strings.ToLower(level) == "error" {
t.loggerConfig.LogLevel = logger.Error
} else if strings.ToLower(level) == "warn" {
t.loggerConfig.LogLevel = logger.Warn
} else if strings.ToLower(level) == "info" {
t.loggerConfig.LogLevel = logger.Info
}
}
func (t *SimpleORM) ConnectMysql() *gorm.DB {
Db, err := gorm.Open(
mysql.Open(t.getDSN()), &gorm.Config{
Logger: logger.New(
log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer
t.loggerConfig,
),
},
)
if err != nil {
panic("failed to connect database")
}
return Db
}