gorm基础知识

97 阅读2分钟

涉及到数据库的基础知识,大概就是增删改查

插入数据

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)
}

阅读世界,共赴山海

423全民读书节,邀你共读