导读
本套笔记是学习完Gin框架之后的下一个阶段,通过Gin框架我们可以很方便的和前端进行交互,下一步就是和数据库进行交互,这就需要使用GORM。本套笔记就是带你快速上手GORM,学习完这个之后就可以完成大项目的开发了,后续还会进行大项目的讲解开发,制作不易,喜欢的就点个关注吧。
本套课程基于GORM 指南 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.进行讲解,是对这个的补充解释说明。
注意
代码详解大部分是注释的形式给出,请留意代码注释。
GORM介绍
GORM(Go Object Relational Mapping)是一个在 Go 语言中使用的优秀的 ORM(对象关系映射)库。它提供了简单且强大的 API,使开发人员能够轻松地与数据库进行交互
保存所有字段
要保存所有字段,可以使用 Save
方法。
save()
var user User // 使用 Save 方法将数据保存到数据库 result := db.Save(&user) db.Save(&User{Name: "jinzhu", Age: 100})
更新单个列
要在 GORM 中更新单个列,可以使用 UpdateColumn
方法。
// 假设你有一个名为 user 的结构体,并已经从数据库中查询得到 var user User // 更新字段的值 user.Name = "New Name" // 使用 UpdateColumn 方法更新数据库记录的单个列 result := db.Model(&user).UpdateColumn("name", user.Name)
完整代码
package main import ( "fmt" "gorm.io/driver/mysql" "gorm.io/gorm" ) // 用户结构体 type User struct { ID uint `gorm:"primaryKey"` Name string `gorm:"column:name"` Age int `gorm:"column:age"` } func main() { // 连接数据库 dsn := "user:password@tcp(localhost:3306)/database?charset=utf8mb4&parseTime=True&loc=Local" db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) // 自动迁移数据库表 err = db.AutoMigrate(&User{}) if err != nil { panic("Failed to migrate database") } // 查询用户 var user User result := db.First(&user) // 更新字段的值 user.Name = "New Name" // 使用 UpdateColumn 方法更新数据库记录的单个列 db.Model(&user).UpdateColumn("name", user.Name) }
我们首先连接到数据库,并使用 AutoMigrate
方法自动迁移数据库表以确保用户表存在。
然后,我们查询并获取要更新的用户。在这里,我们将用户的 Name
字段更新为新的值。
最后,我们使用 Model
方法指定要更新的模型对象,并使用 UpdateColumn
方法将更新后的值保存到数据库中的相应列
更新多个列
可以使用updatas
package main import ( "fmt" "gorm.io/driver/mysql" "gorm.io/gorm" ) // 用户结构体 type User struct { ID uint `gorm:"primaryKey"` Name string `gorm:"column:name"` Age int `gorm:"column:age"` } func main() { // 连接数据库 dsn := "user:password@tcp(localhost:3306)/database? charset=utf8mb4&parseTime=True&loc=Local" db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) // 自动迁移数据库表 err = db.AutoMigrate(&User{}) // 查询用户 var user User result := db.First(&user) // 更新多个字段的值 updates := map[string]interface{}{ "name": "New Name", "age": 30, } // 使用 Updates 方法更新数据库记录的多个列 db.Model(&user).Updates(updates) }
- 首先,我们通过
gorm.Open
方法连接到数据库,并使用提供的数据库连接信息和配置参数。 - 然后,我们使用
db.AutoMigrate
方法自动迁移数据库表,以确保User
结构体对应的表存在于数据库中。 - 接下来,我们使用
db.First
方法查询并获取要更新的用户。将查询结果存储在user
变量中。 - 我们使用一个 map 对象
updates
存储要更新的多个列和它们对应的新值。在这个示例中,我们更新了Name
列为 "New Name",以及更新了Age
列为 30。 - 最后,我们使用
db.Model(&user).Updates(updates)
方法将更新后的值保存到数据库中的相应列。这里的&user
表示要更新的模型对象是user
,Updates(updates)
表示要更新的字段和对应的新值。
更新选定字段
// 更新选定的字段 updates := map[string]interface{}{ "Name": "New Name", } // 使用 Updates 方法更新数据库记录的选定字段 result = db.Model(&user).Updates(updates)
我们将 updates
map 对象中只包含了要更新的 Name
字段和对应的值 "New Name"。
然后,我们使用 db.Model(&user).Updates(updates)
方法将更新保存到数据库中的选定字段。这里的 &user
表示要更新的模型对象是 user
,Updates(updates)
表示要更新的字段和对应的新值。
批量更新
要实现批量更新多个记录的方法,你可以使用 Updates
方法并传递一个包含要更新字段和对应新值的 map 切片
package main import ( "fmt" "gorm.io/driver/mysql" "gorm.io/gorm" ) // 用户结构体 type User struct { ID uint `gorm:"primaryKey"` Name string `gorm:"column:name"` Age int `gorm:"column:age"` } func main() { // 连接数据库 dsn := "user:password@tcp(localhost:3306)/database?charset=utf8mb4&parseTime=True&loc=Local" db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) // 自动迁移数据库表 err = db.AutoMigrate(&User{}) // 批量查询用户 var users []User result := db.Find(&users) // 更新选定的字段 updates := map[string]interface{}{ "Name": "New Name", "Age": 30, } // 使用 Updates 方法更新数据库记录的选定字段 result = db.Model(&User{}).Updates(updates) result.RowsAffected//更新的记录数 }
,我们首先使用 db.Find
查询多个用户,并将查询结果存储在 users
切片中。
然后,我们定义一个 updates
map 对象,其中包含了要更新的字段和对应的新值。
最后,我们使用 db.Model(&User{}).Updates(updates)
方法将更新保存到数据库中。这里的 &User{}
表示要操作的是 User
模型对象,Updates(updates)
表示要更新的字段和对应的新值。