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-driver; git 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'...
fatal: unable to access '![]()https://github.com/go-sql-driver/mysql/': Recv failure: Connection was reset
package ![]()github.com/go-sql-driver/mysql: exit status 128
在这种地方卡了很久,重试了很多次。。。
1、遇到这种情况,先在cmd输入go env查看GO111MODULE是否为auto;
2、其次还有可能是网络问题,连接不稳定,导致下载不了,尝试进入github查看;
3、实在不能clone,直接在官网github.com/go-sql-driv… 下载到对应gopath路径;
连接数据库
- 你需要在你的代码中引入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
{
// 处理连接错误
}
在上述代码中,你需要将user、password、host、port和database替换为你的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)
}