GORM增删改查
一、增
- 单:传入实例即可
user := &User{Name: "XX"} db.Create(user)
- 列表:
users := []User{{Name: "xx"},{Name: "XX1"},{Name: "XX2"}} db.Create(&users)
- 字典
db.Model(&User{}).Create([]map[string]interface{}{{"Name": "WW" },{"Name":"WW1"}})
    Create还有钩子函数:BeforeSave、BeforeCreate、AfterSave、AfterCreate
二、删
- 单个删除必须带ID,否则会触发批量删除
user := User{Name: "XX", ID: 1} db.Delete(&user)id删除 db.Delete(&User{}, 2)
- 条件删除
db.Where( "name = ?" , "XX" ).Delete(&user) 
- 批量删除
db.Delete(User{}, "name LIKE ?" , "%xx%" )删除的钩子函数: BeforeDelete,AfterDelete
三、改
- 根据ID更改
user := User{ID: 3} db.Model(&user).Update("name", "test")db.Model(&User{}).Where("id=?", 4).Update("name", "test2")Model传的是实例,就可以直接操作,传的是结构体本身的话,需要再加条件之后进行操作,当然传的是实例也可以进一步过滤。 
- 批量更改
db.Model(&User{}).Where("name LIKE ?", "test").Update("name", "test2")更改的钩子函数: BeforeSave,BeforeUpdate,AfterSave,AfterUpdate
四、查
    user := User{}
- 
// 获取按主键排序的第一条记录 
 db.First(&user)
- 
// 获取最后一条记录,按主键排序 desc 
 db.Last(&user)
- 
根据ID查询:db.First(&user, 10 ) 
 // SELECT * FROM users WHERE id = 10;user := User{} fmt.Print(user) db.First(&user) fmt.Print(user) //查询后的结果 
- 返回所有数据:
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)
- 
where的参数是查询的具体条件,但是需要用FInd指明查的哪个库,如果单独用find,第二个参数传的是查询条件,最好使用先where后find这种形式。因为后续有复杂查询,where更适合。 
- NOT
var user []User db.Not("id = ?", "3").Find(&user) fmt.Print(user) Not Indb.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)
- 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) 
- 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) 
- 指定具体字段
var user []User db.Select("name").First(&user) fmt.Print(user) 
- 排序
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) 
- limit 和offset
db.Limit( 10 ).Offset( 5 ).Find(&user) 
- 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) 
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号