在数据库中创建表
创建这样一个学生表,包括学生的学号、姓名、性别、年龄
连接数据库
定义gorm model
指定了主键为Sno
type Student struct {
Sno string `gorm:"primaryKey"`
Sname string
Ssex string
Sage uint
}
更改默认表名
func (s Student) TableName() string {
return "student"
}
通过DSN连接数据库
db, err := gorm.Open(mysql.Open("root:123456@tcp(192.168.31.150:3306)/test?&parseTime=True&loc=Local"), &gorm.Config{}) //链接数据库
if err != nil {
panic("failed to connect datebase")
}
因为我本地的环境是win11+linux子系统,mysql数据库在win11系统里,而程序在linux下运行,所以需要指定Windows系统的地址
执行后报错连接超时:
查找原因后发现是由于防火墙引起的,于是我便单独设置了入站规则,可以成功运行,然而过了几天后再运行又报了相同的错误,查找防火墙中的规则发现我自定义的规则被自动删除了。。。
索性直接关了防火墙了
增加数据
通过Create
来创建一条数据
db.Create(&Student{"00001", "张三", "男", 20})
db.Create(&Student{"00002", "李四", "男", 21})
db.Create(&Student{"00003", "王二", "女", 20})
db.Create(&Student{"00004", "赵五", "女", 21})
查找数据
通过First
查找第一个数据
var student Student
db.First(&student, "Ssex=?", "男")
fmt.Println(student)
通过Find
查询多条结果
var results []map[string]interface{}
db.Model(&Student{}).Find(&results, "Ssex=?", "男")
fmt.Println(results)
更新数据
通过Update
更新单个值
db.Model(&Student{}).Where("Sno=?", "00001").Update("Sage", 21)
通过Updates
更新多个值
db.Model(&Student{}).Where("Ssex=?", "男").Updates(map[string]interface{}{"Sage": 18})
删除数据
通过Delete
删除数据
db.Delete(&Student{}, "00001")