使用 GORM 与 MySQL 数据库进行交互来实现增删改查(CRUD)操作

1、安装 GORM 和 MySQL 驱动

新版本库是gorm.io/gorm

go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
2、连接 MySQL 数据库
package main

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

func main() {
    // 数据源名称 (DSN) 格式:username:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local
    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 {
        log.Fatalf("failed to connect database: %v", err)
    }
    log.Println("Connected to the MySQL database successfully.")
}

请根据实际情况替换 dsn 中的 user, password, 127.0.0.1:3306, dbname

3、定义模型

定义一个简单的模型,例如 Product,用于映射到数据库表。

type Product struct {
    gorm.Model
    Code  string
    Price uint
}

这里的 gorm.Model 包含了 ID、CreatedAt、UpdatedAt 和 DeletedAt 字段。

4、完整示例
package main

import (
	"log"

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

type Product struct {
	gorm.Model
	Code  string
	Price uint
}

func main() {
	dsn := "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		log.Fatalf("failed to connect database: %v", err)
	}
	log.Println("Connected to the MySQL database successfully.")

	// 自动创建或迁移表
	db.AutoMigrate(&Product{})

	// 创建
	product := Product{Code: "D42", Price: 100}
	result := db.Create(&product)
	if result.Error != nil {
		log.Fatalf("Failed to create record: %v", result.Error)
	} else {
		log.Printf("Created product with ID: %d", product.ID)
	}

	// 查询
	var retrievedProduct Product
	if err := db.First(&retrievedProduct, 1).Error; err != nil {
		log.Printf("Product not found: %v", err)
	} else {
		log.Printf("Found product: %+v", retrievedProduct)
	}

	// 更新
	product.Price = 150
	result = db.Save(&product)
	if result.Error != nil {
		log.Fatalf("Failed to update record: %v", result.Error)
	} else {
		log.Printf("Updated product: %+v", product)
	}

	// 删除
	result = db.Delete(&product)
	if result.Error != nil {
		log.Fatalf("Failed to delete record: %v", result.Error)
	} else {
		log.Printf("Deleted product with ID: %d", product.ID)
	}
}

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员buddha2080

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值