77 lines
1.7 KiB
Go
77 lines
1.7 KiB
Go
|
package dao
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"mini_server/internal/logger"
|
||
|
"time"
|
||
|
|
||
|
"gorm.io/driver/mysql"
|
||
|
"gorm.io/gorm"
|
||
|
)
|
||
|
|
||
|
type Service struct {
|
||
|
dsn string
|
||
|
db *gorm.DB
|
||
|
}
|
||
|
|
||
|
var s *Service
|
||
|
|
||
|
// 获取当前时间,精度只精确到秒,去掉毫秒等数据。避免保存到数据库时时间进位
|
||
|
func now_func() time.Time {
|
||
|
tmp := time.Now().Local().Format(time.DateTime)
|
||
|
now, _ := time.ParseInLocation(time.DateTime, tmp, time.Local)
|
||
|
return now
|
||
|
}
|
||
|
|
||
|
// // dsn example: "root:123@tcp(127.0.0.1:3306)/test"
|
||
|
func InitDefaultService(dsn string) error {
|
||
|
|
||
|
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
|
||
|
Logger: logger.GormLogger,
|
||
|
NowFunc: now_func,
|
||
|
})
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("open mysql failed, dsn:%v, err:%v", dsn, err)
|
||
|
}
|
||
|
|
||
|
dbs := &Service{dsn: dsn, db: db}
|
||
|
|
||
|
// 自动创建相关的表结构
|
||
|
if err := auto_migrate_all(db); err != nil {
|
||
|
return fmt.Errorf("automigrate failed, err:%v", err)
|
||
|
}
|
||
|
|
||
|
// 数据库连接相关配置
|
||
|
config_connection_info(db)
|
||
|
|
||
|
s = dbs
|
||
|
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// 自动创建对应的数据表结构
|
||
|
func auto_migrate_all(db *gorm.DB) error {
|
||
|
return db.AutoMigrate(
|
||
|
//&Character{}, // 后续需要注释掉,避免修改客户创建的数据表
|
||
|
&ChatRecord{},
|
||
|
&File{},
|
||
|
&Draft{},
|
||
|
&PostLike{},
|
||
|
&PostComment{},
|
||
|
&Post{},
|
||
|
&Bluetooth{},
|
||
|
//&UserCharacter{}, // 需要注释掉,避免修改客户创建的数据表
|
||
|
//&User{}, // 需要注释掉,避免修改客户创建的数据表
|
||
|
)
|
||
|
}
|
||
|
|
||
|
// 数据库连接相关配置
|
||
|
func config_connection_info(db *gorm.DB) {
|
||
|
mysqlDb, err := db.DB()
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
mysqlDb.SetMaxIdleConns(10) // 设置连接池的最大限制连接数
|
||
|
mysqlDb.SetMaxOpenConns(100) // 设置连接池中的最大连接数量
|
||
|
}
|