gorm的学习之旅(3)

目录:

这一篇的主要介绍如何查

查找第一条记录或者最后一条记录

user := models.Users{}
user2 := models.Users{}
user3 := models.Users{}
db.First(&user) //第一个, 默认主键升序
fmt.Println(user)
db.Last(&user2) //最后一个, 默认主键降序
fmt.Println(user2)
db.Take(&user3) //获取一条记录, 没有指定排序字段
fmt.Println(user3)

注意, First,Last,Take都会抛出异常,可以使用err = db.Task().Error来判断是否查询成功


查找所有记录

var users []models.Users
db.Find(&users) // 获取所有记录
fmt.Println(users)

注意,Find函数不会抛出异常,我也没有查到更好的判断是否查询成功的方法,目前我是方法是判断切片的长度


查找主键在指定切片范围的记录

var users1 []models.Users
db.Find(&users1, []int{1, 2, 3, 4}) //查找主键为1,2,3,4的用户
fmt.Println(users1)

指定主键来查询

user4 := models.Users{}
db.First(&user4, 10) //主键为10的用户
fmt.Println(user4)
user5 := models.Users{}
db.First(&user5, "id = ?", "2") //如果主键为字符串, 那么可以写成
fmt.Println(user5)

where条件,字符串类型

user := models.Users{}
db.Where("profile = ?", "Z05CLIU").First(&user) //profile为z05cliu的用户
fmt.Println(user)
users := []models.Users{}
db.Where("profile <> ?", "Z05CLIU").Find(&users) //profile不为z05cliu的用户
fmt.Println(users)
users2 := []models.Users{}
db.Where("profile in ?", []string{"Z05CLIU", "Z30BYAO"}).Find(&users2) //profile为z05cliu和z30byao的用户
fmt.Println(users2)
users3 := []models.Users{}
db.Where("profile like ?", "%Z05%").Find(&users3) //profile中间有z05的用户
fmt.Println(users3)

where条件,切片或结构体类型

user := models.Users{}
db.Where(models.Users{Profile: "Z05CLIU"}).Find(&user) //使用结构体指定条件
fmt.Println(user)
user1 := models.Users{}
db.Where(map[string]interface{}{"Profile": "Z05CLIU"}).Find(&user1) //使用map指定条件
fmt.Println(user1)

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注