业精于勤荒于嬉—Go的GORM查询详解编程语言

查询

//通过主键查询第一条记录 
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) 
 
// IN 
db.Where("name IN (?)", []string{"jinzhu", "jinzhu 2"}).Find(&users) 
 
// LIKE 
db.Where("name LIKE ?", "%jin%").Find(&users) 
 
// AND 
db.Where("name = ? AND age >= ?", "jinzhu", "22").Find(&users) 
 
// 时间 
db.Where("updated_at > ?", lastWeek).Find(&users) 
 
// BETWEEN 
db.Where("created_at BETWEEN ? AND ?", lastWeek, today).Find(&users) 
 

Struct & Map

// Struct 
db.Where(&User{Name: "jinzhu", Age: 20}).First(&user) 
//// SELECT * FROM users WHERE name = "jinzhu" AND age = 20 LIMIT 1; 
 
// Map 
db.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.Model 
  Name string 
  Age  *int 
} 
 
// 使用 Scanner/Valuer 
type User struct { 
  gorm.Model 
  Name string 
  Age  sql.NullInt64  // sql.NullInt64 实现了 Scanner/Valuer 接口 
} 

选择字段

Select,指定你想从数据库中检索出的字段,默认会选择全部字段。

db.Select("name, age").Find(&users) 
//// SELECT name, age FROM users; 
 
db.Select([]string{"name", "age"}).Find(&users) 
//// SELECT name, age FROM users; 
 
db.Table("users").Select("COALESCE(age,?)", 42).Rows() 
//// SELECT COALESCE(age,'42') FROM users; 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/18130.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论