package main import ( "fmt" "log" "net/url" "os" "standard/mysql/select/model" "time" "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/logger" "gorm.io/gorm/schema" ) func main() { dsn := fmt.Sprintf("%s?charset=utf8&parseTime=True&loc=Local&time_zone=%s", "root:miuye123456@tcp(miuyun)/core", url.QueryEscape("'UTC'")) newLogger := logger.New( log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer logger.Config{ SlowThreshold: time.Second, // 慢 SQL 阈值 LogLevel: logger.Silent, // Log level Colorful: false, // 禁用彩色打印 }, ) db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{Logger: newLogger, QueryFields: true, NamingStrategy: schema.NamingStrategy{ TablePrefix: "t_", // 表前缀 SingularTable: false, // 复数形式 }}, ) if err != nil { log.Fatal("init mysql db failed, err: ", err.Error()) return } ChildQuery(db) } func ChildQuery(db *gorm.DB) { var user []model.User // 查询余额大于平均值的用户 db.Debug().Where("amount > (?)", db.Model(&model.User{}).Select("AVG(amount)")).Find(&user) for _, u := range user { fmt.Println(u) } fmt.Println() } func SelectTest(db *gorm.DB) { // 通过较小的结构体进行select var allUser []model.User err := db.Debug().Model(&model.User{}).Limit(2).Find(&allUser).Error if err != nil { log.Fatal(err.Error()) } var simpleUser []model.UserSimple err = db.Debug().Model(&model.User{}).Limit(2).Find(&simpleUser).Error if err != nil { log.Fatal(err.Error()) } err = db.Debug().Model(&model.User{}).Select("id", "code", "user_name", "password").Limit(2).Find(&allUser).Error if err != nil { log.Fatal(err.Error()) } // select所有字段 fmt.Println("select所有字段") //QueryFields 模式会根据当前 model 的所有字段名称进行 select err = db.Debug().Model(&model.User{}).Session(&gorm.Session{QueryFields: true}).Limit(2).Find(&simpleUser).Error if err != nil { log.Fatal(err.Error()) } err = db.Debug().Session(&gorm.Session{QueryFields: true}).Limit(2).Find(&allUser).Error if err != nil { log.Fatal(err.Error()) } // 需要指定 Table或 Model err = db.Debug().Table("t_users").Session(&gorm.Session{QueryFields: true}).Limit(2).Find(&simpleUser).Error if err != nil { log.Fatal(err.Error()) } err = db.Debug().Session(&gorm.Session{QueryFields: true}).Limit(2).Find(&simpleUser).Error if err != nil { log.Fatal(err.Error()) } }