Gorm概述 | 青训营

91 阅读3分钟

Gorm概述

GORM是一个流行的Go语言ORM(对象关系映射)库,用于简化与数据库的交互。它提供了大量的功能和方法,使得使用数据库变得更加容易和高效。不用写sql语句,调用对应的方法即可。

安装gorm框架

//安装MySQL驱动
//在cmd里面输入
go get -u gorm.io/gorm 
go get -u gorm.io/driver/mysql

我出现过这种报错:

cd D:\GO\gopath\src\![]()github.com\go-sql-drivergit clone -- ![]()https://github.com/go-sql-driver/mysql D:\GO\gopath\src\![]()github.com\go-sql-driver\mysql  
Cloning into 'D:\GO\gopath\src\![]()github.com\go-sql-driver\mysql'...  
fatalunable to access '![]()https://github.com/go-sql-driver/mysql/': Recv failure: Connection was reset  
package ![]()github.com/go-sql-driver/mysqlexit status 128

在这种地方卡了很久,重试了很多次。。。

1、遇到这种情况,先在cmd输入go env查看GO111MODULE是否为auto;

2、其次还有可能是网络问题,连接不稳定,导致下载不了,尝试进入github查看;

3、实在不能clone,直接在官网github.com/go-sql-driv… 下载到对应gopath路径;

连接数据库

  1. 你需要在你的代码中引入GORM库和MySQL驱动程序:
import (
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

然后,你可以使用GORM提供的gorm.Open函数连接到MySQL数据库:

dsn := "user:password@tcp(host:port)/database?charset=utf8mb4&parseTime=True&loc=Local" // 替换为你的MySQL连接字符串 
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) 
if err != nil 
{ 
    // 处理连接错误 
}

在上述代码中,你需要将userpasswordhostportdatabase替换为你的MySQL数据库相关信息。连接字符串中的其他参数根据需要进行调整。

创建表

在上面的基础上连接成功后,现在,你已成功连接到MySQL数据库。你可以使用db对象来执行各种数据库操作,例如创建表、查询数据、更新数据等。

以下是一个简单的示例,展示如何使用GORM创建一个Product结构体对应的product表(创建的表默认加s),并向表中插入一条数据:

type Product struct {
	gorm.Model //继承gorm里面的Model模型
	Code       string
	Price      uint
}

func createTable(db *gorm.DB) {
	//迁移 schema	创建表(表的名称就是结构体名+s)
	db.AutoMigrate(&Product{})
}

CRUD

增 Create

用于创建数据记录。通过调用db.Create(&record),将传入的结构体(或结构体切片)插入到数据库中。如果插入成功,相关字段(如ID、创建时间等)将被自动更新。

func insert(db *gorm.DB) {
	//插入数据
	p := Product{
		Code:  "1001",
		Price: 100,
	}
	db.Create(&p)

}

查(Find)

First:用于查询第一条数据记录。通过调用db.First(&result),返回与查询条件匹配的第一条数据记录。你也可以使用Where方法添加查询条件。

func query(db *gorm.DB) {
	//Read
	var product Product
	db.First(&product, 1) //根据主键查找
	fmt.Printf("product1: %v\n", product)
	db.First(&product, "code=?", "D42") //根据字段查找code字段为D42的记录

	fmt.Printf("product2: %v\n", product)
}

Last:用于查询最后一条数据记录。通过调用db.Last(&result),返回与查询条件匹配的最后一条数据记录。你同样可以使用Where方法添加查询条件。

改(Update)

先通过First方法查出来,再去修改,更新数据记录。通过调用db.Model(&record).Updates(&data),将指定的数据记录更新为给定的数据。record为待更新的结构体,data包含需要更新的字段和值。

修改单个字段:

func updateOne(db *gorm.DB) {
	var p Product
	db.First(&p, 1)
	//Update - 将product的price更新为1000
	db.Model(&p).Update("Price", 1000)
}

修改多个字段:

注:仅更新非零值字段

func updateMore(db *gorm.DB) {
	var product Product
	//Update- 更新多个字段
	db.Model(&product).Updates(Product{Price: 200, Code: "F42"}) //仅更新非零值字段
	db.Model(&product).Updates(map[string]interface{}{"Price": 200, "Code": "F42"})
}

删(Delete)

删除数据记录。通过调用db.Delete(&record),删除指定的数据记录。如果结构体定义了软删除标志字段,GORM将执行软删除操作,否则执行物理删除。

func delete(db *gorm.DB) {
	var product Product
	db.Delete(&product)
}