SELECT*FROM student WHERE age =26AND grade = "1年级";
GORM 操作
1 2
var students []Student result := db.Where("age = ? AND grade = ?", 26, "1年级").Find(&students)
场景 2: 根据条件查询行记录的指定列的值
sql
1
SELECT id, grade, age FROM student WHERE age =26;
GORM 操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14
// 方式一,注意一定要用.Model(&Student{})!!否则不生效 var results []map[string]interface{} result := db.Model(&Student{}).Select("id", "grade", "age").Where("age = ?", 26).Find(&results)
// 方式二,注意一定要用.Model(&Student{})!!否则不生效 type StudentInfo struct { ID uint Grade string Age int } var infos []StudentInfo db.Model(&Student{}).Select("id", "grade", "age").Where("age = ?", 26).Find(&infos)
-- 连表查询 SELECT s.id, s.grade, s.age, b.name as book_name FROM student s LEFTJOIN book b ON b.id = s.book_id WHERE s.age =26;
-- 先查主表,再批量查关联表 SELECT*FROM student WHERE age =26; SELECT*FROM book WHERE book_id IN (1,2,3,4);
GORM 操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
// 方法一:使用 Preload (GORM 的推荐方式,先查主表,再批量查关联表) var students []Student // Preload("Book") 会自动执行一次 JOIN 或额外的 SELECT 来加载关联的 Book db.Preload("Book").Where("age = ?", 26).Find(&students)
// 方法二:使用 Joins + Scan (适用于需要从关联表选择特定列) type StudentBookInfo struct { ID uint Grade string Age int BookName string`gorm:"column:book_name"` } var infos []StudentBookInfo
db.Table("students s"). Select("s.id, s.grade, s.age, b.name as book_name"). Joins("LEFT JOIN books b ON b.id = s.book_id"). Where("s.age = ?", 26). Scan(&infos)
场景 4: 根据主键 ID 更新指定列的数据,并返回更新行的记录
Sql
1
UPDATE student SET grade = "3年级", age =27WHERE id =1;
GORM 操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
var updatedStudent Student db.First(&updatedStudent, studentID)