整理文章 | 豆包MarsCode AI刷题

117 阅读3分钟

使用 GORM 进行数据库操作全解析

一、连接数据库

在使用 GORM 连接数据库之前,首先需要导入相应的包。假设我们使用 MySQL 数据库,需要导入  gorm.io/driver/mysql  和  gorm.io/gorm  包。示例代码如下:

go

package main

import ( "gorm.io/driver/mysql" "gorm.io/gorm" )

func main() { // 构建数据库连接字符串 dsn := "user:password@tcp(127.0.0.1:3306)/database_name?charset=utf8mb4&parseTime=True&loc=Local" // 连接数据库 db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) if err!= nil { panic(err) } // 后续操作... }  

这里的  dsn  字符串包含了数据库的用户名、密码、主机地址、端口、数据库名以及一些字符集和时间解析的设置,需要根据实际情况进行修改。连接成功后, db  变量将用于后续的数据库操作。

二、创建结构体与表映射

定义结构体来映射数据库表,结构体的字段对应表的列。例如,创建一个  User  结构体来映射  users  表:

go

type User struct { ID uint gorm:"primaryKey" Name string Age int }  

在结构体中,可以使用标签来指定 GORM 的一些配置,如  gorm:"primaryKey"  表示  ID  字段是主键。通过  db.AutoMigrate(&User{})  函数可以自动创建  users  表,如果表已经存在,则会根据结构体的定义进行表结构的迁移,比如添加新字段或修改字段类型等操作:

go

func main() { // 连接数据库代码... // 自动迁移表结构 err := db.AutoMigrate(&User{}) if err!= nil { panic(err) } }  

三、增删改查操作

(一)插入数据

使用  Create  方法向数据库中插入数据。例如:

go

func main() { // 连接数据库和迁移表结构代码... user := User{Name: "John", Age: 30} result := db.Create(&user) if result.Error!= nil { panic(result.Error) } // 插入成功后,user.ID 会被自动赋值为数据库生成的主键值 fmt.Println(user.ID) }  

(二)查询数据

1. 查询所有数据:使用  Find  方法查询所有记录并将结果存储到切片中。

go

func main() { // 连接数据库和迁移表结构代码... var users []User result := db.Find(&users) if result.Error!= nil { panic(result.Error) } for _, user := range users { fmt.Println(user.Name, user.Age) } }  

2. 条件查询:可以使用  Where  子句添加查询条件。例如,查询年龄大于 25 岁的用户:

go

func main() { // 连接数据库和迁移表结构代码... var users []User result := db.Where("age >?", 25).Find(&users) if result.Error!= nil { panic(result.Error) } for _, user := range users { fmt.Println(user.Name, user.Age) } }  

(三)更新数据

使用  Model  和  Update  方法更新数据。例如,将名为 "John" 的用户年龄更新为 31 岁:

go

func main() { // 连接数据库和迁移表结构代码... result := db.Model(&User{}).Where("name =?", "John").Update("age", 31) if result.Error!= nil { panic(result.Error) } }  

(四)删除数据

使用  Where  和  Delete  方法删除数据。例如,删除名为 "John" 的用户记录:

go

func main() { // 连接数据库和迁移表结构代码... result := db.Where("name =?", "John").Delete(&User{}) if result.Error!= nil { panic(result.Error) } }  

通过以上步骤,我们可以使用 GORM 方便地连接数据库并进行常见的增删改查操作,大大提高了数据库开发的效率和便捷性。在实际应用中,还可以进一步探索 GORM 的高级特性,如关联查询、事务处理等,以满足更复杂的业务需求。