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) // 设置连接池中的最大连接数量 }