likes
comments
collection
share

[GORM]基本CRUD

作者站长头像
站长
· 阅读数 28

插入数据

使用Create函数即可向数据库中插入数据。

以结构体User为例:

type User struct {
    Id    int64
    Name  string
    Age   int64
}
func main(){
  //判断文件夹db是否存在,不存在则创建一个,不判断的话无法成功连接数据库
  _,err:=os.Open("./db/sys.db")
  if !os.IsExist(err){
    os.Mkdir("./db",0777)
  }
  db,_:=gorm.Open(sqlite.Open("./db/sys.db"))
  db.AutoMigrate(&entity.User{})//自动创建数据表
  db.Create(&entity.User{Name:"张三",Age:18})
}

运行结果如下:

[GORM]基本CRUD

获取数据

获取数据有很多种方法。

Find函数

该函数可以返回找到的第一行数据也可以返回所有数据

func main(){
  //数据库连接部分省略,下同
  user := entity.User{}
  //select * from `users` limit 1
  db.Find(&user)
  fmt.Printf("id:%d,name:%s,age:%d", user.Id, user.Name, user.Age)
}

[GORM]基本CRUD

[GORM]基本CRUD

func main(){
  //数据库连接部分省略,下同
  var user []entity.User
  //select * from `users`
  db.Find(&user)
  for _, u := range user {
    fmt.Printf("id:%d,name:%s,age:%d\n", u.Id, u.Name, u.Age)
  }
}

[GORM]基本CRUD

Find的条件查询

可以利用Find()的参数实现。

Find(数据存储位置,sql statement语句,占位符值...)可以按照一定条件查找值。

func main(){
  //数据库连接部分省略,下同
  var user []entity.User
  //select * from `users` where age>15 and name like '张%2'
  db.Find(&user, "age>? and name like ?", 15, "张%2")
  for _, u := range user {
    fmt.Printf("id:%d,name:%s,age:%d\n", u.Id, u.Name, u.Age)
  }
}

[GORM]基本CRUD

也可以利用Where实现。

func main(){
  //数据库连接部分省略,下同
  var user []entity.User
  //select * from `users` where age>15 and name like '张%2'
  db.Where("age>? and name like ?", 15, "张%2").Find(&user)
  for _, u := range user {
    fmt.Printf("id:%d,name:%s,age:%d\n", u.Id, u.Name, u.Age)
  }
}

[GORM]基本CRUD

Find的指定列查询

使用Select()可以查询指定的列

func main(){
  //数据库连接部分省略,下同
  var user []entity.User
  //select name,age from `users`
  db.Select("name", "age").Find(&user)
  for _, u := range user {
    fmt.Printf("id:%d,name:%s,age:%d\n", u.Id, u.Name, u.Age)
  }
}

[GORM]基本CRUD

更新数据

更新数据有很多种方法,可以使用两种函数完成。UpdateUpdatesSave

以下所有截图都基于一下结果展示

[GORM]基本CRUD

Update函数

该函数可以修改一个列的值,必须使用Model方法确定ID

func main(){
  //数据库连接部分省略,下同
  user := entity.User{Id: 2}
  //update `users` set name='哈哈' where id=2
  db.Model(&user).Update("name", "哈哈")
}

[GORM]基本CRUD

修改后:

[GORM]基本CRUD

该函数也可以和Where一起配合使用:

func main(){
  //修改所有姓张的且ID为2的人的信息
  //update from `users` set name='哈哈' where id=2 and name like '张%'
    user := entity.User{Id: 2}
    db.Model(&user).Where("name like '张%'").Update("name", "哈哈")
  //上面的语句与下面的语句与下面的语句等价
  //db.Model(&entity.User{}).Where("name like '张%' and `id`=2").Update("name","哈哈")
}

[GORM]基本CRUD

func main(){
  //修改所有姓张的人的信息,此处,Model函数的参数是一个接口就表明不进行ID筛选。
  //update `users` set name='哈哈' like name='张%'
    db.Model(&entity.User{}).Where("name like '张%'").Update("name", "哈哈")
}

[GORM]基本CRUD

Updates函数

该函数更新多列的值

func main(){
  //修改ID为2的数据,将名字改为哈哈,将年龄改为17
  //update `users` set name='哈哈',age=17 where id=2
    user := entity.User{Id: 2, Name: "哈哈", Age: 17}
    db.Model(&user).Updates(&user)
}

[GORM]基本CRUD

func main(){
  //修改ID为2的数据,将名字改为哈哈,年龄改为20
    user := entity.User{Id: 2, Name: "哈哈", Age: 17}
  //update `users` set name='哈哈',age=20 where id=2
    db.Model(&user).Updates(&entity.User{Name: "哈哈", Age: 20})//可以直接定义对象
}

[GORM]基本CRUD

Updates函数无法修改多行数据因此必须指定要修改的内容

Save函数

Save会保存所有的值,即使字段是零值。它不能和Model()一起使用。

删除数据

删除数据使用Delete即可。但必须指定条件,否则会触发批量删除。

func main(){
  //删除id为2的数据
    user := entity.User{Id: 2}
  // delete from `users` where id=2
    db.Delete(&user)
}

[GORM]基本CRUD

GORM对批量删除有保护措施。

func main(){
  //删除id为2的数据
    user := entity.User{}
  // delete from `user`
    db.Delete(&user)
}

[GORM]基本CRUD

转载自:https://juejin.cn/post/7373623949836091426
评论
请登录