涉及到数据库的基础知识,大概就是增删改查
插入数据
type Student struct {//定义结构体
ID int
Name string
Sex string
Hobby string
Phonenumber string
}
func main() {
db, _ := gorm.Open(mysql.Open("root:@tcp(127.0.0.1:3308)/stu?charset=utf8"), &gorm.Config{})//链接数据库
stu:=Student{Name: "gg",Sex: "man",Hobby: "kk",Phonenumber: "535138"}//创建结构体对象
db.Create(&stu)//插入到数据
}
删除数据
注意:删除数据是根据主键的条件来删除数据,如果你传入的删除数据的条件中没有主键,将不会删除主键
所以要想删除数据,要么需要传入主键的值,要么从数据库中查找到该条数据,如果没有设定返回特定的列,则数据库返回的是该条数据所有的字段。
type test struct {//构造结构体
gorm.Model
Username string
}
func main() {
db, _ := gorm.Open(mysql.Open("root:@tcp(127.0.0.1:3308)/stu?charset=utf8"), &gorm.Config{})//链接数据库
var t test
db.Where("username=?","ii").Scan(&t)//在数据库中查找该条数据,并将找到的数据扫描到变量t中
db.Delete(&t)//删除词条数据,
//注意,这里的删除数据,删除之后,在数据库中仍然有该条数据,只是在该条数据中的deleted_at字段添加了删除时间,为软删除
为了探明是否真的为按照主键删除该条数据,做以下测试,一是只返回该条数据的主键,二是返回该条数据除主键之外的字段
只返回该条数据的主键
type Student struct {
ID int
Name string
Sex string
Hobby string
Phonenumber string
}
func main() {
db, _ := gorm.Open(mysql.Open("root:@tcp(127.0.0.1:3308)/stu?charset=utf8"), &gorm.Config{})
var stu Student
db.Select("id").Where("name=?","kk").Find(&stu)//只返回该条数据的主键id
db.Delete(stu)//传入主键,删除数据
}
可以发现,此时,该条数据被删除
返回除主键字段,所有的字段,并做删除测试
type Student struct {
ID int
Name string
Sex string
Hobby string
Phonenumber string
}
func main() {
db, _ := gorm.Open(mysql.Open("root:@tcp(127.0.0.1:3308)/stu?charset=utf8"), &gorm.Config{})
var stu Student
db.Select([]string{"sex","hobby","phonenumber"}).Where("name=?","xiang").Find(&stu)
db.Delete(stu)
}
此时,该条数据并未被删除
更新数据
type Student struct {
ID int
Name string
Sex string
Hobby string
Phonenumber string
}
func main() {
db, _ := gorm.Open(mysql.Open("root:@tcp(127.0.0.1:3308)/stu?charset=utf8"), &gorm.Config{})
var stu Student
db.Where("name=?","xiang").Find(&stu)
db.Model(&stu).Update("name","ll")
}
需要注意的是,更新数据,也应该是以主键为条件,如果未传主键,则更改数据不成功
查询数据
db.Find(&stum)//查找所有数据
db.First(&stu)//取第一条数据
db.Last(&stu)//取最后一条数据
db.Take(&stu)//随机取一条数据
db.where("name=?","name").find(&stu)//按照条件查找
i:=db.Where("id>?",0).Scan(&stum).RowsAffected//表示,查找id大于0的数据,并且返回受影响的数据条数
原生sql语句
type Student struct {
ID int
Name string
Sex string
Hobby string
Phonenumber string
}
func main() {
db, _ := gorm.Open(mysql.Open("root:@tcp(127.0.0.1:3308)/stu?charset=utf8"), &gorm.Config{})
var stu []Student
db.Exec("select * from students").Scan(&stu)//将查找的数据扫描到stu中
fmt.Println(stu)
}