查询
var user Uservar users []User// 根据主键查询第一条记录db.First(&user)//// SELECT * FROM users ORDER BY id LIMIT 1;// 随机获取一条记录db.Take(&user)//// SELECT * FROM users LIMIT 1;// 根据主键查询最后一条记录db.Last(&user)//// SELECT * FROM users ORDER BY id DESC LIMIT 1;// 查询所有的记录db.Find(&users)//// SELECT * FROM users;// 查询指定的某条记录(仅当主键为整型时可用)db.First(&user, 10)//// SELECT * FROM users WHERE id = 10;
Where 条件
普通 SQL
// 获取第一个匹配的记录db.Where("name = ?", "jinzhu").First(&user)//// SELECT * FROM users WHERE name = 'jinzhu' limit 1;// 获取所有匹配的记录db.Where("name = ?", "jinzhu").Find(&users)//// SELECT * FROM users WHERE name = 'jinzhu';// <>db.Where("name <> ?", "jinzhu").Find(&users)//// SELECT * FROM users WHERE name <> 'jinzhu';// INdb.Where("name IN (?)", []string{"jinzhu", "jinzhu 2"}).Find(&users)//// SELECT * FROM users WHERE name in ('jinzhu','jinzhu 2');// LIKEdb.Where("name LIKE ?", "%jin%").Find(&users)//// SELECT * FROM users WHERE name LIKE '%jin%';// ANDdb.Where("name = ? AND age >= ?", "jinzhu", "22").Find(&users)//// SELECT * FROM users WHERE name = 'jinzhu' AND age >= 22;// Timedb.Where("updated_at > ?", lastWeek).Find(&users)//// SELECT * FROM users WHERE updated_at > '2000-01-01 00:00:00';// BETWEENdb.Where("created_at BETWEEN ? AND ?", lastWeek, today).Find(&users)//// SELECT * FROM users WHERE created_at BETWEEN '2000-01-01 00:00:00' AND '2000-01-08 00:00:00';
Struct & Map
// Structdb.Where(&User{Name: "jinzhu", Age: 20}).First(&user)//// SELECT * FROM users WHERE name = "jinzhu" AND age = 20 ORDER BY id LIMIT 1;// Mapdb.Where(map[string]interface{}{"name": "jinzhu", "age": 20}).Find(&users)//// SELECT * FROM users WHERE name = "jinzhu" AND age = 20;// 主键切片db.Where([]int64{20, 21, 22}).Find(&users)//// SELECT * FROM users WHERE id IN (20, 21, 22);
提示 当通过结构体进行查询时,GORM将会只通过非零值字段查询,这意味着如果你的字段值为0,’’, false 或者其他 零值时,将不会被用于构建查询条件,例如:
db.Where(&User{Name: "jinzhu", Age: 0}).Find(&users)//// SELECT * FROM users WHERE name = "jinzhu";
你可以使用指针或实现 Scanner/Valuer 接口来避免这个问题.
// 使用指针type User struct {gorm.ModelName stringAge *int}// 使用 Scanner/Valuertype User struct {gorm.ModelName stringAge sql.NullInt64 // sql.NullInt64 实现了 Scanner/Valuer 接口}
