创建数据
使用db.Create方法,传入结构体的指针创建
sql
复制代码
user := User{UserName: "l", Password: "ddd"}
result := db.Create(&user)
插入后返回的常用数据
arduino
复制代码
fmt.Println("ID:", user.ID) // 插入的主键
fmt.Println("error:", result.Error) // 返回的 error
fmt.Println("rowsAffected:", result.RowsAffected) // 插入的条数
只插入指定字段
sql
复制代码
user := User{UserName: "lzq", Password: "ccc"}
result := db.Select("UserName").Create(&user)
不插入指定字段: result :=db.Omit("UserName").Create(&user)
批量插入
css
复制代码
users := []User{
{UserName: "lzq", Password: "aaa"},
{UserName: "qqq", Password: "bbb"},
{UserName: "gry", Password: "ccc"},
}
db.Create(&users)
分批批量插入
如果插入的数量非常大,那么可以使用CreateInBatches方法分批次插入
css
复制代码
users := []User{
{UserName: "lzq", Password: "aaa"},
{UserName: "qqq", Password: "bbb"},
{UserName: "gry", Password: "ccc"},
{UserName: "lzq", Password: "aaa"},
{UserName: "qqq", Password: "bbb"},
{UserName: "gry", Password: "ccc"},
}
db.CreateInBatches(&users, 2)//每次插入两条
查询数据
查询单个对象
First:主键升序
Take:不排序
Last:主键降序
如果没有查询到对象,那么会返回ErrRecordNotFound错误
根据主键查询
在 First/Take/Last 等函数中设置第二个参数,该参数被认作是 ID,可以选择 int 或 string 类型
查询多个对象
bash
复制代码
users := []User{}
result := db.Find(&users)
使用Find查询多条数据,如果查询不到不会返回错误
设置查询条件
gorm 提供了Where 方法,可以实现 =、<>、IN、LIKE、AND、>、<、BETWEEN 等方法,使用 ? 来占位
sql
复制代码
db.Where("name = ?", "l").First(&user)
// SELECT * FROM users WHERE user_name = 'l' ORDER BY id LIMIT 1;
// 获取全部匹配的记录
db.Where("name <> ?", "l").Find(&users)
// SELECT * FROM users WHERE user_name <> 'l';
// IN
db.Where("name IN ?", []string{"lzq", "qqq"}).Find(&users)
// SELECT * FROM users WHERE user_name IN ('lzq','qqq');
// LIKE
db.Where("name LIKE ?", "%l%").Find(&users)
// SELECT * FROM users WHERE user_name LIKE '%l%';
// AND
db.Where("name = ? AND age = ?", "lzq", "aaa").Find(&users)
// SELECT * FROM users WHERE user_name = 'lzq' AND password = aaa;
// BETWEEN
db.Where("created_at BETWEEN ? AND ?", lastWeek, today).Find(&users)
// SELECT * FROM users WHERE created_at BETWEEN '2020-11-01 00:00:00' AND '2020-11-08 00:00:00';
Where快速设置条件的方法
传递 Struct、Map 和 切片时,可以实现更简便的设置条件
php
复制代码
db.Where(&User{UserName:"lzq", Password:"aaa"}).Find(&user)
db.Where(map[string]interface{}{"user_name": "lzq", "password": "aaa"}).Find(&user)
db.Where([]int{10, 11}).Find(&user)//切片时查询主键
当使用结构体作为查询条件时,GORM只会查询非零值字段
作者:梦晓Devil
链接:juejin.cn/post/719370…
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。