查询数据

  • 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}