lxutils/lxDb/db.go
2024-03-06 14:41:53 +08:00

94 lines
2.1 KiB
Go

package lxDb
import (
"context"
"fmt"
"git.listensoft.net/tool/lxutils/lxzap"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"gorm.io/gorm/schema"
"os"
)
// DB2.0 数据库连接 gorm2.0
var DBS map[string]*gorm.DB //gs 数据库
type DbConfig struct {
Name string
Host string
Port string
User string
Password string
Database string
Charset string
}
func GetDB(c *gin.Context, dbName ...string) *gorm.DB {
v, _ := c.Get("X-Span-ID")
spanId := fmt.Sprintf("%v", v)
ctx := context.WithValue(context.Background(), "X-Span-ID", spanId)
d := "one"
if len(dbName) != 0 {
d = dbName[0]
}
return DBS[d].WithContext(ctx)
}
func InitDBS(env string, conf []DbConfig) {
DBS = map[string]*gorm.DB{}
if len(conf) == 1 {
conf[0].Name = "one"
}
for _, config := range conf {
InitDB(env, config)
}
}
func InitDB(env string, conf DbConfig) {
if conf.Name == "" {
DBS = nil
fmt.Println("db name 错误")
return
}
if conf.Host == "" {
DBS = nil
fmt.Println("未配置Db连接")
return
}
if conf.Charset == "" {
conf.Charset = "utf8mb4"
}
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&parseTime=True&loc=Local",
conf.User, conf.Password, conf.Host, conf.Port, conf.Database, conf.Charset)
if env == "dev" {
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: logger.Default.LogMode(logger.Info),
NamingStrategy: schema.NamingStrategy{
SingularTable: true, // 使用单数表名,启用该选项,此时,`User` 的表名应该是 `user`
},
})
if err != nil {
fmt.Println(err.Error())
os.Exit(-1)
}
DBS[conf.Name] = db
} else {
logger2 := lxzap.NewGormZap(zap.L())
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
//Logger: logger.Default.LogMode(logger.Info),
Logger: logger2,
NamingStrategy: schema.NamingStrategy{
SingularTable: true, // 使用单数表名,启用该选项,此时,`User` 的表名应该是 `user`
},
})
if err != nil {
fmt.Println(err.Error())
os.Exit(-1)
}
DBS[conf.Name] = db
}
//db.AutoMigrate(TaskData{}, Task{}, Version{})
}