查询数据¶
- 1) 用map来接收结果
var result = make(map[string]interface{})
db.Model(&User{}).Last((&result))
fmt.Println(result)
- 2) 用结构体来接收结果
var user User
db.Model(&User{}).Last(&user)
fmt.Println(user)
- 3) Take查询
var user User
db.Model(&User{}).Take(&user)
fmt.Println(user)
提示
Take不排序,First和Last要排序
- 4) Fisrt查询
var user User
db.Debug().First(&user)
fmt.Println(user)
提示
db.Debug()中的Debug()是打印orm生成的sql语句,Debug()也可以不要。
- 5) Last查询
var user User
db.Debug().Last(&user)
fmt.Println(user)
- 6) Find查询
var users []User
db.Find(&users, "Name=?", "批量插入1")
fmt.Printf("%#v\n", users)
提示
查询多条记录,Find函数返回的是一个数组
- 7) Where条件查询
var user User
db.Debug().Where(User{Name: "批量插入1"}).Last(&user)
fmt.Println(user)
- 8) 查询多条
var user []User
db.Where(map[string]interface{}{
"Name": "批量插入1",
}).Find((&user))
fmt.Println(user)
提示
查询多条记录用[]User来接收,单条记录用User来接收
- 9) Select查询指定字段
var user User
global_db.Debug().Select([]string{"name", "age"}).Where("name = ?", "批量插入5").Take(&user)
fmt.Println(user)
提示
返回name和age字段,其他字段为空
- 10) Order排序
var users []User
db.Where("Created_At >= ?", "2022-03-16 00:00:00").Order("age desc").Find(&users)
fmt.Println(users)
提示
desc是降序,默认是升序
- 11) Count
var total int64 = 0
db.Model(User{}).Where("age >= ?","19").Count(&total)
fmt.Println(total)
提示
注意 total 是int64类型
- 12) Limit
var users []User
db.Where("name = ?", "批量插入1").Limit(1).Find(&users)
fmt.Println(users)
提示
如果没有Limit(1),users里有多条数据
- 13) 原生sql查询
var user []User
db.Debug().Raw("select * from users").Scan(&user)
fmt.Println(user)
提示
当查询结果为空时不会报错,空结果比如: {0 <nil> 0 <nil> { false} {0001-01-01 00:00:00 +0000 UTC false} [] 0 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC}