package gormExample import "log" // 原生查询测试 func RawSelect() { // 结果类型 type Result struct { ID uint Subject string Likes, Views int } var rs []Result // SQL sql := "SELECT `id`, `subject`, `likes`, `views` FROM `msb_content` WHERE `likes` > ? ORDER BY `likes` DESC LIMIT ?" // 执行SQL,并扫描结果 if err := DB.Raw(sql, 99, 12).Scan(&rs).Error; err != nil { log.Fatalln(err) } // [8.298ms] [rows:12] SELECT `id`, `subject`, `likes`, `views` FROM `msb_content` WHERE `likes` > 99 ORDER BY `likes` DESC LIMIT 12 log.Println(rs) } // 执行类的SQL原生 func RawExec() { // SQL sql := "UPDATE `msb_content` SET `subject` = CONCAT(`subject`, '-new postfix') WHERE `id` BETWEEN ? AND ?" // 执行,获取结果 result := DB.Exec(sql, 30, 40) if result.Error != nil { log.Fatalln(result.Error) } // [13.369ms] [rows:10] UPDATE `msb_content` SET `subject` = CONCAT(`subject`, '-new postfix') WHERE `id` BETWEEN 30 AND 40 log.Println(result.RowsAffected) } // sql.Row 或 sql.Rows 类型的结果处理 func RowAndRows() { // sql sql := "SELECT `id`, `subject`, `likes`, `views` FROM `msb_content` WHERE `likes` > ? ORDER BY `likes` DESC LIMIT ?" // 执行,获取rows rows, err := DB.Raw(sql, 99, 12).Rows() if err != nil { log.Fatalln(err) } // 遍历rows for rows.Next() { // 扫描的列独立的变量 //var id uint //var subject string //var likes, views int //rows.Scan(&id, &subject, &likes, &views) //log.Println(id, subject, likes, views) // 扫描到整体结构体 type Result struct { ID uint Subject string Likes, Views int } var r Result if err := DB.ScanRows(rows, &r); err != nil { log.Fatalln(err) } log.Println(r) } }