update
This commit is contained in:
74
models/database.go
Normal file
74
models/database.go
Normal file
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
@Time : 2020/6/28 21:46
|
||||
@Author : xuyiqing
|
||||
@File : init.py
|
||||
*/
|
||||
|
||||
package models
|
||||
|
||||
import (
|
||||
"go_blog/config"
|
||||
"go_blog/pkg/util"
|
||||
"log/slog"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"gorm.io/driver/mysql"
|
||||
"gorm.io/driver/postgres"
|
||||
"gorm.io/driver/sqlite"
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/schema"
|
||||
)
|
||||
|
||||
var DB *gorm.DB
|
||||
|
||||
func InitDatabase(conf *config.Config) {
|
||||
var dialector gorm.Dialector
|
||||
switch conf.DataBase.Driver {
|
||||
case "mysql":
|
||||
dialector = mysql.Open(conf.DataBase.DSN)
|
||||
case "postgres":
|
||||
dialector = postgres.Open(conf.DataBase.DSN)
|
||||
case "sqlite":
|
||||
dialector = sqlite.Open(conf.DataBase.DSN)
|
||||
default:
|
||||
slog.Error("不支持的数据库驱动", "driver", conf.DataBase.Driver)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
db, err := gorm.Open(dialector, &gorm.Config{
|
||||
NamingStrategy: schema.NamingStrategy{
|
||||
TablePrefix: conf.DataBase.Prefix,
|
||||
},
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
slog.Error("数据库连接失败", "error", err)
|
||||
os.Exit(1)
|
||||
} else {
|
||||
slog.Info("数据库连接成功", "driver", conf.DataBase.Driver, "DSN", conf.DataBase.DSN)
|
||||
}
|
||||
|
||||
DB = db
|
||||
// 3. 自动迁移数据模型
|
||||
db.AutoMigrate(&Account{})
|
||||
db.AutoMigrate(&Content{})
|
||||
// if err := db.AutoMigrate(&models.Article{}, &models.User{}); err != nil {
|
||||
// panic("数据库迁移失败: " + err.Error())
|
||||
// }
|
||||
}
|
||||
|
||||
type BaseModel struct {
|
||||
ID uint64 `gorm:"primary_key'" json:"id"`
|
||||
CreatedAt time.Time `json:"-"`
|
||||
UpdatedAt time.Time `json:"-"`
|
||||
DeletedAt *time.Time `sql:"index" json:"-"`
|
||||
}
|
||||
|
||||
// 生成全局唯一ID
|
||||
func (m *BaseModel) BeforeCreate(scope *gorm.DB) error {
|
||||
if m.ID == 0 {
|
||||
m.ID = util.GenSonyFlakeId()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user