// ======================= // 获取第一条记录(主键升序) db.First(&user) // SELECT * FROM users ORDER BY id LIMIT 1;
// 获取一条记录,没有指定排序字段;返回的结果取决于数据库实现,有可能每次都是相同的 // Take return a record that match given conditions, the order will depend on the database implementation db.Take(&user) // SELECT * FROM users LIMIT 1;
// 获取最后一条记录(主键降序) db.Last(&user) // SELECT * FROM users ORDER BY id DESC LIMIT 1;
result := db.First(&user) result.RowsAffected // 返回找到的记录数 result.Error // returns error or nil
// 指定db.Model查询 result := map[string]interface{}{} db.Model(&User{}).First(&result)
// ======================= // 通过主键查询 db.First(&user, 10) // SELECT * FROM users WHERE id = 10; db.Find(&users, []int{1,2,3}) // SELECT * FROM users WHERE id IN (1,2,3); // 主键是字符串 db.First(&user, "id = ?", "1b74413f-f3b8-409f-ac47-e8c062e3472a")
// ======================= // 也可以先初始化实例,然后进行查询 var user = User{ID: 10} db.First(&user) // SELECT * FROM users WHERE id = 10;
检索全部对象
1 2 3 4 5 6 7 8
result := db.Find(&users) // SELECT * FROM users; // 查询之后,数据放在内存,大表要避免这种操作
result.RowsAffected // returns found records count, equals `len(users)` result.Error // returns error
// Get first matched record db.Where("name = ?", "xx").First(&user) // SELECT * FROM users WHERE name = 'xx' ORDER BY id LIMIT 1;
// Get all matched records db.Where("name <> ?", "xx").Find(&users) // SELECT * FROM users WHERE name <> 'xx';
// IN db.Where("name IN ?", []string{"xx1", "xx2"}).Find(&users) // SELECT * FROM users WHERE name IN ('xx1','xx2');
// LIKE db.Where("name LIKE ?", "%xx%").Find(&users) // SELECT * FROM users WHERE name LIKE '%xx%';
// AND db.Where("name = ? AND age >= ?", "xx", "11").Find(&users) // SELECT * FROM users WHERE name = 'xx' AND age >= 11;
// Time db.Where("updated_at > ?", lastWeek).Find(&users) // SELECT * FROM users WHERE updated_at > '2022-01-01 00:00:00';
// BETWEEN db.Where("created_at BETWEEN ? AND ?", lastWeek, today).Find(&users) // SELECT * FROM users WHERE created_at BETWEEN '2022-01-01 00:00:00' AND '2022-01-08 00:00:00';
Distinct查询
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
// Select Distince var data []string db.Model(&User{}).Distinct("name").Find(&data) // SELECT DISTINCT(`name`) FROM `users`