使用GO的ORM库连接数据库,进行crud操作| 青训营

56 阅读2分钟

步骤 1:安装 GORM 首先,我们需要安装 GORM 包。在终端中运行以下命令: shell go get -u gorm.io/gorm

步骤 2:导入所需的包 在 Go 代码的开头导入以下包:

import ( "gorm.io/driver/mysql" // 如果你使用的是 MySQL 数据库 "gorm.io/gorm" )

步骤 3:建立数据库连接 在代码中建立数据库连接,示例中使用 MySQL 数据库作为示范:

func main() { // 连接数据库 dsn := "user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local" db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) if err != nil { panic("无法连接数据库") } defer db.Close() }

请确保替换 user 、 password 和 dbname 为你的实际数据库凭据和名称。

步骤 4:定义模型结构 在 GORM 中,我们需要定义模型结构来映射数据库表。下面是一个示例模型结构:

type User struct { gorm.Model Name string Email string }

在这个示例中,我们定义了一个名为 User 的模型,它包含了 Name 和 Email 两个字段。

步骤 5:创建表和迁移 在 GORM 中,我们可以使用 AutoMigrate 方法来创建表和进行迁移。在 main 函数中添加以下代码:

func main() { // ... // 创建表和进行迁移 db.AutoMigrate(&User{}) }

这将根据模型结构自动创建名为 users 的表。

步骤 6:实现增删改查操作 现在,我们可以使用 GORM 提供的方法来执行增删改查操作。以下是一些示例:

创建记录

func createUser(db *gorm.DB, name, email string) { user := User{Name: name, Email: email} db.Create(&user) }

查询记录

func getUserByID(db *gorm.DB, id uint) (User, error) { var user User result := db.First(&user, id) if result.Error != nil { return user, result.Error } return user, nil }

更新记录

func updateUserEmail(db *gorm.DB, id uint, email string) error { user, err := getUserByID(db, id) if err != nil { return err } user.Email = email result := db.Save(&user) return result.Error }

删除记录

func deleteUser(db *gorm.DB, id uint) error { result := db.Delete(&User{}, id) return result.Error }

完整示例代码 以下是一个完整的示例代码,包含了上述所有步骤:

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

type User struct { gorm.Model Name string Email string }

func main() { // 连接数据库 dsn := "user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local" db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) if err != nil { panic("无法连接数据库") } defer db.Close() // 创建表和进行迁移 db.AutoMigrate(&User{}) // 创建记录 createUser(db, "John Doe", "john@example.com") // 查询记录 user, err := getUserByID(db, 1) if err != nil { panic(err) } fmt.Println(user.Name, user.Email) // 更新记录 err = updateUserEmail(db, 1, "newemail@example.com") if err != nil { panic(err) } // 删除记录 err = deleteUser(db, 1) if err != nil { panic(err) } }

func createUser(db *gorm.DB, name, email string) { user := User{Name: name, Email: email} db.Create(&user) }

func getUserByID(db *gorm.DB, id uint) (User, error) { var user User result := db.First(&user, id) if result.Error != nil { return user, result.Error } return user, nil }

func updateUserEmail(db *gorm.DB, id uint, email string) error { user, err := getUserByID(db, id) if err != nil { return err } user.Email = email result := db.Save(&user) return result.Error }

func deleteUser(db *gorm.DB, id uint) error { result := db.Delete(&User{}, id) return result.Error }