gorm是一个流行且使用的Go语言对象关系映射(ORM)框架,它可以让用户方便地操作各种数据库,包括mysql。使用gorm连接mysql数据库并进行增删改查操作其实非常的简单
1. 首先是导入gorm和mysql驱动包,并定义一个结构体(struct)来表示数据模型。例如,如果想存储用户的名字和编号,可以定义一个User结构体,如下所示:
终端输入以下两段命令并等待安装完成
go get -u gorm.io/gorm
go get -u gorm-u gorm.io/driver/mysql
import (
"fmt"
"time"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
type User struct {
gorm.Model
Name string
No int
}
注意,gorm.Model是一个嵌入式结构体,它包含了四个基本字段:ID, CreatedAt, UpdatedAt, DeletedAt。也可以自定义这些字段或者不使用gorm.Model
2.使用gorm.Open函数来创建一个gorm.DB实例,它代表了一个数据库连接池。需要传入一个数据源名称(DSN)和一个gorm.Config参数。DSN是一个字符串,它指定了数据库的用户名、密码、地址、端口、名称等信息。
*gorm.Config是一个结构体,它包含了一些配置选项,例如是否启用日志、是否检查表结构等
如果想连接到本地的mysql数据库,并使用默认的配置选项,像下面这样写代码:
dsn := "root:123456@tcp(127.0.0.1:3306)/hehe?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
fmt.Println("连接失败")
fmt.Println(err)
}
fmt.Println("连接成功")
3.使用gorm.DB实例的AutoMigrate方法来自动创建或更新数据表。需要传入一个或多个结构体类型作为参数,gorm会根据这些结构体的定义来创建或更新相应的数据表。
例如,如果想根据User结构体来创建或更新users表,如下
if err != nil {
panic("增加字段失败")
}
4.使用*gorm.DB实例的Create方法来插入一条或多条数据到数据库中。您需要传入一个或多个结构体实例作为参数,gorm会根据这些结构体的值来生成相应的SQL语句并执行。
例如,如果想插入一条用户数据到users表中
result := db.Create(&user)
if result.Error != nil {
panic("增加数据失败")
}
5. 使用gorm.DB实例的Find方法来从数据库中查询一条或多条数据。可以在Find方法之前使用各种条件方法来指定查询条件,例如Where, Order, Limit, Offset。Find方法需要传入一个切片(slice)作为参数,gorm会将查询结果赋值给该切片。
例如,如果想查询users表中所有用户的数据,并按照创建时间降序排序
var users []User
result := db.Order("created_at desc").Find(&users)
fmt.Println(&users)
if result.Error != nil {
panic("查询失败")
}
6. 使用gorm.DB实例的Save方法来更新一条或多条数据到数据库中。需要传入一个或多个结构体实例作为参数,gorm会根据这些结构体的值来生成相应的SQL语句并执行。Save方法会更新结构体中所有的字段,无论它们是否发生了变化。
例如,如果想更新一条用户数据到users表中
其中user.ID 必须是该表的主键
user.ID = 1
user.CreatedAt = time.Now()
user.UpdatedAt = time.Now()
result := db.Save(&user)
if result.Error != nil {
fmt.Printf("更新失败")
}
7. 使用gorm.DB实例的Delete方法来删除一条或多条数据从数据库中。可以在Delete方法之前使用各种条件方法来指定删除条件,例如Where, Order, Limit, Offset等。Delete方法需要传入一个结构体类型或实例作为参数,gorm会根据该结构体的定义来生成相应的SQL语句并执行。Delete方法会执行软删除(soft delete),即将DeletedAt字段设置为当前时间,而不是真正删除数据。
例如,如果想删除users表中ID为12的用户数据
这里的ID也需要是表的主键
if result.Error != nil{
panic("删除失败")
}
以上大部分方法都会返回一个gorm.DB类型的结果,它包含了一些有用的信息,例如影响的行数、错误信息等 详细可参考(github.com/go-sql-driv…)
参考资料: gorm.io/docs/index.…