前言
数据库是后端编程中无法逃避的技术点,Go语言中,有许多优秀的 ORM(对象关系映射)库,用于简化数据库操作和数据持久化
GORM是Go 语言中最流行的 ORM 库之一,它提供了强大的查询功能、自动迁移、事务处理等功能。它支持多种数据库,如MySQL、PostgreSQL、SQLite 等
本文,介绍一下GORM连接数据库以及实现增删改查的过程
安装相关依赖和包
自己使用的是Windows系统,首先ctrl+R打开cmd,执行以下命令安装依赖:
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
或者
go get -u github.com/jinzhu/gorm
go get -u github.com/go-sql-driver/mysql
因为GORM框架只是简单封装了数据库的驱动包,在安装时仍需要下载原始的驱动包,上述命令就是实现了该过程
但是在自己实践过程中发现,命令会执行失败,提示信息如下:
发现是网络问题,原因是因为go包管理网址默认使用的是proxy.golang.org ,但在国内无法访问,因此需要更改一个国内代理地址,代码如下:
go env -w GOPROXY=https://goproxy.cn
添加后,命令即可成功执行:
在Go中使用
在下载好之后,尝试在项目中直接import相关包,but....
提示我们找不到对应包,这是为什么呢???
主要是因为我们的对应的包没有导入进来,把包导入进来即可
连接数据库
以MySQL为例,连接数据库的示例代码如下:
dsn := "user:password@tcp(localhost:3306)/dbname?parseTime=True"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("Failed to connect to database")
}
下面我来详细解释一下,dsn是一个字符串,用于指定数据库连接的详细信息。
在本例子中
user:password是数据库的用户名和密码tcp(localhost:3306):指定数据库服务器的地址和端口。localhost表示数据库位于本地计算机,3306是 MySQL 默认的端口号/dbname:指定要连接的数据库的名称parseTime=True:这是一个参数,告诉 GORM 在处理数据库时间字段时解析时间。如果不设置此参数,时间字段可能会以字符串形式返回
定义好字段之后,下一步便可以开始打开数据库连接了,使用gorm.Open 函数来打开数据库连接,其包含两个参数:
- 第一个参数是数据库驱动程序,通过
mysql.Open(dsn)来指定连接到 MySQL 数据库。 - 第二个参数是一个
&gorm.Config{}结构体,用于配置 GORM 的行为。在这里,采用默认配置即可
接下来,对可能发生的错误进行处理,使用 if err != nil 来检查数据库连接是否失败。如果连接失败,就会触发 panic,导致程序崩溃,并显示 "Failed to connect to database" 消息
定义模型
在使用 GORM 连接数据库时,通常需要定义 Go 结构体来表示数据库中的表格。每个结构体字段应该与数据库表格的列名和数据类型对应,同时还可以使用 struct tag 来指定其他配置项,如主键、外键、自动增量等。
例如,我现在有一个名字为“user”的用户表格,含有Email和Age字段,那么我可以定义一个简单的模型如下:
type User struct {
gorm.Model
// 列名、数据类型、唯一索引、非空约束
Username string `gorm:"column:username;type:varchar(255);unique_index;not null"` /
Email string `gorm:"column:email;type:varchar(255);unique_index;not null"`
Password string `gorm:"column:password;type:varchar(255);not null"`
Age int `gorm:"column:age;type:int"`
}
为什么需要定义模型呢?
在GORM中,模型定义使得 GORM 能够根据结构体自动生成 SQL 查询语句,并且方便了数据库表格和 Go 代码之间的映射。设计原因是为了确保模型与数据库表格的结构保持一致,同时使用 struct tag 来指定约束和配置信息,以便 GORM 能够正确地操作数据库。
我感觉的话,是在代码中显式体现数据库的设计关系,更加便利,同时减少错误
增删改查
最后,我们使用GORM提供的方法执行数据库操作,如创建、读取、更新、删除记录等
增
代码如下:
newUser := User{Username: "BB", Email: "1779971738@qq.com"}
db.Create(&newUser)
首先,创建了一个新的 User 结构体实例 newUser,对其进行初始化之后,使用 db.Create 方法将这个用户对象插入到数据库中。
查
var user User
db.First(&user, 2)
首先,声明了一个 user 变量,用于存储查询到的用户对象。使用 db.First 方法,我们可以根据给定的条件(这里是 ID 为 2)从数据库中查找用户。查找到的结果会被填充到 user 变量中
改
db.Model(&user).Update("Username", "JJ")
使用 db.Model 方法,我们指定了要更新的模型对象,然后使用 Update 方法来更新其中的字段。在这里,我们将 UserName 字段从 "BB" 更新为 "JJ"
删
db.Delete(&user)
使用 db.Delete 方法删除了 user 对象表示的用户。这会从数据库中删除具有相同主键值的记录
结语
总体来看,使用GoRM来进行数据库开发还是非常便捷的,今天主要是Go语言的数据库操作,后续更新一般Java和Go连接数据库以及增删改查一些简单操作的对比
感觉Go之所以这么简单,主要是由于模型定义和自带方法,使得数据库交互更加方便