zoukankan      html  css  js  c++  java
  • GORM增删改查

    一、增

    1. 单:传入实例即可
          user := &User{Name: "XX"}
          db.Create(user)
    2. 列表:
          users := []User{{Name: "xx"},{Name: "XX1"},{Name: "XX2"}}
          db.Create(&users)
    3. 字典
          db.Model(&User{}).Create([]map[string]interface{}{{"Name": "WW" },{"Name":"WW1"}})

        Create还有钩子函数:BeforeSaveBeforeCreateAfterSave、AfterCreate

    二、删

    1. 单个删除必须带ID,否则会触发批量删除
          user := User{Name: "XX", ID: 1}
          db.Delete(&user)

      id删除

          db.Delete(&User{}, 2)
    2. 条件删除
      db.Where( "name = ?" , "XX" ).Delete(&user) 
    3. 批量删除
      db.Delete(User{}, "name LIKE ?" , "%xx%" ) 

      删除的钩子函数:BeforeDeleteAfterDelete

    三、改

    1. 根据ID更改
          user := User{ID: 3}
          db.Model(&user).Update("name", "test")
          db.Model(&User{}).Where("id=?", 4).Update("name", "test2")

      Model传的是实例,就可以直接操作,传的是结构体本身的话,需要再加条件之后进行操作,当然传的是实例也可以进一步过滤。

    2. 批量更改
          db.Model(&User{}).Where("name LIKE ?", "test").Update("name", "test2")

      更改的钩子函数: BeforeSaveBeforeUpdateAfterSaveAfterUpdate

    四、查

        user := User{}
    1. // 获取按主键排序的第一条记录
      db.First(&user)
    2. // 获取最后一条记录,按主键排序 desc
      db.Last(&user)
    3. 根据ID查询:db.First(&user, 10 )
      // SELECT * FROM users WHERE id = 10;
          user := User{}
          fmt.Print(user)
          db.First(&user)
          fmt.Print(user) //查询后的结果
    4. 返回所有数据:
          var user []User
          db.Find(&user)

      也可以添加条件

          var user []User
          db.Find(&user, "id = 3")
          fmt.Print(user)

      也可以用where

      # 写法 1 写死数据
      var user []User //db.Find(&user, "id = 3") db.Where("id = ?", "3").Find(&user) fmt.Print(user)

           
      # 写法2  更灵活
      var user []User //db.Not("id = ?", "3").Find(&user) db.Where(&User{Name: "xx"}).Find(&user) fmt.Print(user)
    5. where的参数是查询的具体条件,但是需要用FInd指明查的哪个库,如果单独用find,第二个参数传的是查询条件,最好使用先where后find这种形式。因为后续有复杂查询,where更适合。

    6. NOT
          var user []User
          db.Not("id = ?", "3").Find(&user)
          fmt.Print(user)
      Not In
      db.Not( map [ string ] interface {}{ "name" : [] string { "xx" , "xx2" }}).Find(&user) 

      In

       db.Where( "name IN ?" , [] string { "xx" , "xx2" }).Find(&users) 

      Not In id_list

      db.Not([] int64 { 1 , 2 , 3 }).Find(&user) 
    7. OR 通常和where一起使用
          var user []User
          db.Where("id", "4").Or("id", "3").Find(&user)
          fmt.Print(user)
          var user []User
          db.Where(&User{ID: 4}).Or(&User{ID: 3}).Find(&user)
          fmt.Print(user)
    8. and
          var user []User
          db.Where("id =? AND name = ?", "3", "test2").Find(&user)
          fmt.Print(user)
          var user []User
          db.Where(map[string]interface{}{"name": "test2", "id":"3"}).Find(&user)
          fmt.Print(user)
    9. 指定具体字段
          var user []User
          db.Select("name").First(&user)
          fmt.Print(user)
    10. 排序
          var user []User
          db.Order("name desc").Find(&user)
          fmt.Print(user)
          var user []User
          db.Order("name desc").Order("id desc").Find(&user)
          fmt.Print(user)
    11. limit 和offset
      db.Limit( 10 ).Offset( 5 ).Find(&user) 
    12. count
          var user []User
          var count int64
          db.Where("name", "test2").Find(&user).Count(&count)
          fmt.Print(user, count)

       过滤字段重复

          var user []User
          var count int64
          db.Where("name", "test2").Distinct("name").Find(&user).Count(&count)
          fmt.Print(user, count)
  • 相关阅读:
    通过反射实现IOC功能
    数据访问模式之Repository模式
    .NET自带IOC容器MEF之初体验
    权限管理系统进入关键的开发阶段
    待销售分拣单App数据推送
    做一个自己的权限管理系统
    linux tar 命令 --致力于“一眼看懂,随手就用”的随笔
    python 简单实现文件拷贝
    实验比较python中的range和xrange
    安装 chardet ,出现ImportError: No module named setuptools
  • 原文地址:https://www.cnblogs.com/qinghuaL/p/14847750.html
Copyright © 2011-2022 走看看