type User struct{ ID uint `gorm:"primary_key"` Name string Age int Birthday time.Time AddTime time.Time }
连接数据库 db, err := gorm.Open("mysql", "用户名:密码@tcp(地址:端口号)/数据库名") if err != nil { panic("连接数据库失败") }
创建表
db.SingularTable(true) //不设置,创建生成的表名都是默认是复数形式后面带s的,设置上这一句话,就不会默认带s了 //db.CreateTable(&User{}) //创建表
表内插入数据
//user := User{Name: "Jinzhu", Age: 18, Birthday: time.Now()} //db.Create(&user) //插入数据
查询
查询出所有的数据,查询到的结果是个可循环的切片 type User struct{ ID uint `gorm:"primary_key"` Name string Age int Birthday time.Time } var user []User a :=db.Find(&user) #查询出所有的 打印出来查询的东西 for _, a:= range user { fmt.Println(a) fmt.Println(a.ID) }
查询出所有符合条件的数据,查询到的结果是个可循环的切片
var user []User //select * from user where name="Jinzhu1" a :=db.Where("name = ?", "Jinzhu1").Find(&user) //Find是查询所有,First查询出一条 for _, a:= range user { fmt.Println(a) fmt.Println(a.ID) }
db.Where("name = ?", "jinzhu").First(&users) //查询出一条符合的数据 db.Where("name <> ?", "jinzhu").Find(&user) //查出name不等于jinzhu的数据 db.Where("name in (?)", []string{"jinzhu", "jinzhu1"}).Find(&user) //查询出name in ("jinzhu", "jinzhu1") 所有数据 db.Where("name LIKE ?", "%jin%").Find(&user) //模糊查询 select * from user where name LIKE "%jin%" db.Where("name = ? AND age >= ?", "jinzhu", "17").Find(&user) //select * FROM user Where name ="jinzhu" AND age>17 db.Where(&User{Name: "jinzhu", Age: 20}).First(&user) //SELECT * FROM users WHERE name = "jinzhu" AND age = 20 LIMIT 1; db.Where(map[string]interface{}{"name": "jinzhu", "age": 20}).Find(&users) //SELECT * FROM users WHERE name = "jinzhu" AND age = 20; db.Where([]int64{1, 2, 3}).Find(&user) //SELECT * FROM users WHERE id IN (20, 21, 22); 用结构体查询的时候,GORM只会与非零条件查询,查询条件中的 0 ,"",false获取他零值,它不会被用来构成查询条件,例如 db.Where(&User{Name: "jinzhu", Age: 0}).Find(&users) // SELECT * FROM users WHERE name = "jinzhu";
查询出来的数据是单条的话 user :=User{} db.Find(&user) // 查询 fmt.Println(user.ID) //获取使用查询出来的某个字段
更新 单条更新的(包括自动更新的如当前时间的字段) user :=User{} db.First(&user) //查询出一条数据 user.Name="334" //给数据赋新值 db.Save(&user) //更新 UPDATE users SET name='334' WHERE id=1;但是如果表中有自动更新的字段,如时间更新当前的时间,那么用Save也会把这些一块更新的
单条更新更新改变字段 user := User{} db.Model(&user).Update("name","啊") //更新所有的数据 name="啊"
更新符合条件的数据 db.Model(&user).Where("id = ?", 1).Update("name", "hello") 更新所有数据的多个字段 db.Model(&user).Updates(map[string]interface{}{"name": "hello", "age": 18}) 更新所有数据的多个字段 db.Model(&user).Updates(User{Name: "hello", Age: 18}) 下面这个不会被更新,只会更新非空白的值,即非 0,false ,""等 db.Model(&user).Updates(User{Name: "", Age: 0}) 更新字段忽略选定的字段,下面忽略了name omit中的 db.Model(&user).Omit("name").Updates(map[string]interface{}{"name": "321", "age": 118}) 更新选定的字段,只更新name字段即Select里面的字段 db.Model(&user).Select("name").Updates(map[string]interface{}{"name": "hello", "age": 18})
批量更新符合条件的数据 db.Table("user").Where("id IN (?)", []int{1, 2}).Updates(map[string]interface{}{"name": "aa", "age": 9}) db.Model(User{}).Where("id IN (?)",[]int{1,2}).Updates(User{Name: "cc", Age: 13})
删除 user := User{} db.Delete(&user) //删除表里的所有数据了 带条件的删除 db.Where("name LIKE ?", "%jinzhu%").Delete(User{})
|
请发表评论