19.获取第一条记录,按主键排序
var user User
db.First(&user)
fmt.Println(user)
20.获取最后一条记录,按主键排序
db.Last(&user)
21.获取所有记录
var users []User
db.Find(&users)
fmt.Println(users)
22.使用主键获取记录(id=10)
db.First(&user, 10)
23.获取第一个匹配记录
db.Where("name = ?", "jinzhu").First(&user)
24.获取所有匹配记录
db.Where("name = ?", "jinzhu").Find(&users)
25.IN的使用
db.Where("name in (?)", []string{"jinzhu", "jinzhu 2"}).Find(&users)
26.LIKE的使用
db.Where("name LIKE ?", "%jin%").Find(&users)
27.AND的使用
db.Where("name = ? AND age >= ?", "jinzhu", "22").Find(&users)
28.struct的Where查询,注意:当使用struct查询时,GORM将只查询那些具有值的字段
db.Where(&User{Name: "jinzhu", Age: 20}).First(&user)
29.map的Where查询
db.Where(map[string]interface{}{"name": "jinzhu", "age": 20}).Find(&users)
30.带内联条件的查询
// 按主键获取
db.First(&user, 23)
// 简单SQL
db.Find(&user, "name = ?", "jinzhu")
31.Or的使用
db.Where("role = ?", "admin").Or("role = ?", "super_admin").Find(&users)
32.查询链
db.Where("name <> ?","jinzhu").Where("age >= ? and role <> ?",20,"admin").Find(&users)
33.扩展查询选项
db.Set("gorm:query_option", "FOR UPDATE").First(&user, 10)
34.Select的使用
db.Select("name, age").Find(&users)
35.Order的使用
b.Order("age desc, name").Find(&users)
36.Limit的使用
db.Limit(3).Find(&users)
37.Offset的使用(指定在开始返回记录之前要跳过的记录数)
db.Offset(3).Find(&users)
38.Count的使用
db.Where("name = ?", "jinzhu").Or("name = ?", "jinzhu 2").Find(&users).Count(&count)
39.GroupBy的使用
rows, err := db.Table("orders").Select("date(created_at) as date, sum(amount) as total").Group("date(created_at)").Having("sum(amount) > ?", 100).Rows()
40.Join的使用
db.Table("users").Select("users.name, emails.email").Joins("left join emails on emails.user_id = users.id").Scan(&results)
41.Scan的使用
type Result struct {
Name string
Age int
}
db.Raw("SELECT name, age FROM users WHERE name = ?", 3).Scan(&result)