mysqlORM.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. package dao
  2. import (
  3. "fmt"
  4. "github.com/RaymondCode/simple-demo/api"
  5. "github.com/RaymondCode/simple-demo/config"
  6. "github.com/RaymondCode/simple-demo/entities"
  7. "gorm.io/driver/mysql"
  8. "gorm.io/gorm"
  9. "gorm.io/gorm/logger"
  10. "log"
  11. "os"
  12. "strconv"
  13. "time"
  14. )
  15. var Db *gorm.DB
  16. /*func init() {
  17. var (
  18. err error
  19. )
  20. Db, err = gorm.Open(mysql.Open("root:97782078@tcp(127.0.0.1:3306)/douyin?charset=utf8&parseTime=True&loc=Local"), &gorm.Config{})
  21. if err != nil {
  22. panic(err)
  23. }
  24. }*/
  25. func InitDb() {
  26. username := config.CONFIG.MySQLConfig.Username // 账号
  27. password := config.CONFIG.MySQLConfig.Password // 密码
  28. host := config.CONFIG.MySQLConfig.Host // 数据库地址,可以是Ip或者域名
  29. port := config.CONFIG.MySQLConfig.Port // 数据库端口
  30. dbName := config.CONFIG.MySQLConfig.DBname // 数据库名
  31. // dsn := "用户名:密码@tcp(地址:端口)/数据库名"
  32. dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?parseTime=True&loc=Local", username, password, host, port, dbName)
  33. // 配置Gorm连接到MySQL
  34. mysqlConfig := mysql.Config{
  35. DSN: dsn, // DSN
  36. DefaultStringSize: 256, // string 类型字段的默认长度
  37. SkipInitializeWithVersion: false, // 根据当前 MySQL 版本自动配置
  38. }
  39. newLogger := logger.New(
  40. log.New(os.Stdout, "\r\n", log.LstdFlags),
  41. logger.Config{
  42. SlowThreshold: time.Millisecond * 0, // 慢 SQL 阈值
  43. LogLevel: logger.Info, // 日志级别
  44. IgnoreRecordNotFoundError: true, // 忽略ErrRecordNotFound(记录未找到)错误
  45. Colorful: false, // 禁用彩色打印
  46. },
  47. )
  48. if db, err := gorm.Open(mysql.New(mysqlConfig), &gorm.Config{
  49. Logger: newLogger,
  50. }); err == nil {
  51. sqlDB, _ := db.DB()
  52. sqlDB.SetMaxOpenConns(config.CONFIG.MySQLConfig.MaxOpenConns) // 设置数据库最大连接数
  53. sqlDB.SetMaxIdleConns(config.CONFIG.MySQLConfig.MaxIdleConns) // 设置上数据库最大闲置连接数
  54. Db = db
  55. } else {
  56. panic("connect server failed")
  57. }
  58. }
  59. func GetList() []api.Video {
  60. //node := entities.Tbs{Val: 1}
  61. var lists []entities.Video
  62. Db.Table("video").Where("id > ?", 0).Order("id desc").Limit(30).Debug().Find(&lists)
  63. var resLists []api.Video
  64. var userIdList []int64
  65. for i := 0; i < len(lists); i++ {
  66. userIdList = append(userIdList, lists[i].AuthorId)
  67. }
  68. for i := 0; i < len(userIdList); i++ {
  69. fmt.Println(strconv.Itoa(i) + " " + strconv.FormatInt(userIdList[i], 10))
  70. }
  71. var temp []entities.User
  72. tempmap := map[int64]entities.User{}
  73. Db.Table("user").Where("id In ?", userIdList).Debug().Find(&temp)
  74. for i := 0; i < len(temp); i++ {
  75. fmt.Println("", temp[i])
  76. tempmap[temp[i].Id] = temp[i]
  77. }
  78. for key, val := range tempmap {
  79. fmt.Println(key, val)
  80. }
  81. for i := 0; i < len(lists); i++ {
  82. var userNode entities.User
  83. value, ok := tempmap[lists[i].AuthorId]
  84. if ok {
  85. userNode = value
  86. } else {
  87. fmt.Println("去数据库中查找")
  88. Db.Table("user").Where("id = ?", lists[i].AuthorId).Debug().Find(&userNode)
  89. }
  90. resuserNode := api.User{
  91. Id: userNode.Id,
  92. Name: userNode.Name,
  93. FollowCount: userNode.FollowCount,
  94. FollowerCount: userNode.FollowerCount,
  95. IsFollow: userNode.IsFollow,
  96. }
  97. resLists = append(resLists, api.Video{
  98. Id: lists[i].Id,
  99. Author: resuserNode,
  100. PlayUrl: lists[i].PlayUrl,
  101. CoverUrl: lists[i].CoverUrl,
  102. FavoriteCount: lists[i].FavoriteCount,
  103. CommentCount: lists[i].CommentCount,
  104. IsFavorite: lists[i].IsFavorite,
  105. })
  106. }
  107. for i := 0; i < len(resLists); i++ {
  108. fmt.Print("%v+\n", resLists[i])
  109. }
  110. return resLists
  111. }
  112. func GetListById(id int64) []api.Video {
  113. fmt.Println("runninggetlistById")
  114. //node := entities.Tbs{Val: 1}
  115. var lists []entities.Video
  116. Db.Table("video").Where("author_id = ?", id).Order("id desc").Limit(30).Debug().Find(&lists)
  117. var resLists []api.Video
  118. var userNode entities.User
  119. Db.Table("user").Where("id = ?", id).Debug().Find(&userNode)
  120. for i := 0; i < len(lists); i++ {
  121. resuserNode := api.User{
  122. Id: userNode.Id,
  123. Name: userNode.Name,
  124. FollowCount: userNode.FollowCount,
  125. FollowerCount: userNode.FollowerCount,
  126. IsFollow: userNode.IsFollow,
  127. }
  128. resLists = append(resLists, api.Video{
  129. Id: lists[i].Id,
  130. Author: resuserNode,
  131. PlayUrl: lists[i].PlayUrl,
  132. CoverUrl: lists[i].CoverUrl,
  133. FavoriteCount: lists[i].FavoriteCount,
  134. CommentCount: lists[i].CommentCount,
  135. IsFavorite: lists[i].IsFavorite,
  136. })
  137. }
  138. for i := 0; i < len(resLists); i++ {
  139. fmt.Print("%v+\n", resLists[i])
  140. }
  141. return resLists
  142. }
  143. type OSSKey struct {
  144. Key string `form:"key"`
  145. Secret string `form:"secret"`
  146. }
  147. func GetOSSKEy() []string {
  148. var res OSSKey
  149. Db.Table("osskey").Debug().First(&res)
  150. return []string{res.Key, res.Secret}
  151. }