GORM基本使用( 二 )


查询默认添加条件为空
db.Where("age = 20").Find(&user)// SELECT * FROM users WHERE age = 20 AND deleted_at IS NULL;
查询软删除记录
db.Unscoped().Where("age = 20").Find(&users)// SELECT * FROM users WHERE age = 20;
查询
查询条件where支持、和map 。
查询单个对象
【GORM基本使用】First、Take、Last方法 , 以便从数据库中检索单个对象 。当查询数据库时它添加了LIMIT 1条件 , 且没有找到记录时 , 它会返回错误 。model 没有定义主键 , 那么将按 model 的第一个字段进行排序 。
var user User// 获取第一条记录(主键升序)db.Where("name = ?", "jinzhu").First(&user)// SELECT * FROM users WHERE name = 'jinzhu' ORDER BY id LIMIT 1;// Struct设置条件db.Where(&User{Name: "jinzhu", Age: 20}).First(&user)// SELECT * FROM users WHERE name = "jinzhu" AND age = 20 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;result := map[string]interface{}{}db.Model(&User{}).First(&result)// SELECT * FROM `users` ORDER BY `users`.`id` LIMIT 1
查询多个对象 。find(&users)函数 , 查询结果放入users切片结构体中 。
var users []Userdb.Where("name IN ?", []string{"jinzhu", "jinzhu 2"}).Find(&users)// SELECT * FROM users WHERE name IN ('jinzhu','jinzhu 2');// Map设置条件db.Where(map[string]interface{}{"name": "jinzhu", "age": 20}).Find(&users)// SELECT * FROM users WHERE name = "jinzhu" AND age = 20;
组合条件 。把where的条件放到查询函数中写 。
// Plain SQLdb.Find(&users, "name = ?", "jinzhu")// SELECT * FROM users WHERE name = "jinzhu";db.Find(&users, "name <> ? AND age > ?", "jinzhu", 20)// SELECT * FROM users WHERE name <> "jinzhu" AND age > 20;// Structdb.Find(&users, User{Age: 20})// SELECT * FROM users WHERE age = 20;// Mapdb.Find(&users, map[string]interface{}{"age": 20})// SELECT * FROM users WHERE age = 20;