main.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "net/url"
  6. "os"
  7. "standard/mysql/select/model"
  8. "time"
  9. "gorm.io/driver/mysql"
  10. "gorm.io/gorm"
  11. "gorm.io/gorm/logger"
  12. "gorm.io/gorm/schema"
  13. )
  14. func main() {
  15. dsn := fmt.Sprintf("%s?charset=utf8&parseTime=True&loc=Local&time_zone=%s", "root:miuye123456@tcp(miuyun)/core", url.QueryEscape("'UTC'"))
  16. newLogger := logger.New(
  17. log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer
  18. logger.Config{
  19. SlowThreshold: time.Second, // 慢 SQL 阈值
  20. LogLevel: logger.Silent, // Log level
  21. Colorful: false, // 禁用彩色打印
  22. },
  23. )
  24. db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{Logger: newLogger, QueryFields: true, NamingStrategy: schema.NamingStrategy{
  25. TablePrefix: "t_", // 表前缀
  26. SingularTable: false, // 复数形式
  27. }},
  28. )
  29. if err != nil {
  30. log.Fatal("init mysql db failed, err: ", err.Error())
  31. return
  32. }
  33. ChildQuery(db)
  34. }
  35. func ChildQuery(db *gorm.DB) {
  36. var user []model.User
  37. // 查询余额大于平均值的用户
  38. db.Debug().Where("amount > (?)", db.Model(&model.User{}).Select("AVG(amount)")).Find(&user)
  39. for _, u := range user {
  40. fmt.Println(u)
  41. }
  42. fmt.Println()
  43. }
  44. func SelectTest(db *gorm.DB) {
  45. // 通过较小的结构体进行select
  46. var allUser []model.User
  47. err := db.Debug().Model(&model.User{}).Limit(2).Find(&allUser).Error
  48. if err != nil {
  49. log.Fatal(err.Error())
  50. }
  51. var simpleUser []model.UserSimple
  52. err = db.Debug().Model(&model.User{}).Limit(2).Find(&simpleUser).Error
  53. if err != nil {
  54. log.Fatal(err.Error())
  55. }
  56. err = db.Debug().Model(&model.User{}).Select("id", "code", "user_name", "password").Limit(2).Find(&allUser).Error
  57. if err != nil {
  58. log.Fatal(err.Error())
  59. }
  60. // select所有字段
  61. fmt.Println("select所有字段")
  62. //QueryFields 模式会根据当前 model 的所有字段名称进行 select
  63. err = db.Debug().Model(&model.User{}).Session(&gorm.Session{QueryFields: true}).Limit(2).Find(&simpleUser).Error
  64. if err != nil {
  65. log.Fatal(err.Error())
  66. }
  67. err = db.Debug().Session(&gorm.Session{QueryFields: true}).Limit(2).Find(&allUser).Error
  68. if err != nil {
  69. log.Fatal(err.Error())
  70. }
  71. // 需要指定 Table或 Model
  72. err = db.Debug().Table("t_users").Session(&gorm.Session{QueryFields: true}).Limit(2).Find(&simpleUser).Error
  73. if err != nil {
  74. log.Fatal(err.Error())
  75. }
  76. err = db.Debug().Session(&gorm.Session{QueryFields: true}).Limit(2).Find(&simpleUser).Error
  77. if err != nil {
  78. log.Fatal(err.Error())
  79. }
  80. }