使用 GORM(Go 的 ORM 库)连接数据库 | 豆包MarsCode AI刷题

103 阅读45分钟

首先,简单看一下要用到的相关库和软件

GORM:ORM 是 Object Relational Mapping 的缩写,译为“对象关系映射",它解决了对象和关系型数据库之间的数据交互问题。 简单说就是 使用一个类表示一张表,类中的属性表示表的字段,类的实例化对象表示一条记录

mysql:关系型数据库的代表之一

docker:容器管理软件

1.初始化数据库

按以下步骤初始化一个数据库

 配置docker-compose.yaml文件,设置mysql数据库的版本,端口,用户,密码

在conf\test\conf.yaml中设置导入的数据库dsn

从左到右的gorm分别是user,password,database

使用docker创建数据库

docker compose up -d

创建后如下所示

可以在初始化函数中输出版本号或其他东西,测试一下数据库连接是否成功,注意不要同时在主函数中初始化两个数据库,原因如下:

在代码里面开启多个协程,这些协程处于同一个事务中,这些协程都开启了数据库操作,在事务中进行多协程并发读写会报这个错误。

能够查看到服务启动时输出123,DB初始化成功,可以使用vscode中的MySQL可视化工具看到相关的数据库情况

2.创建数据模型

使用结构体创建数据模型

type User struct {    gorm.Model    Email          string `gorm:"unique"`    PasswordHashed string}

常用的结构结构体可以直接使用gorm.Model,包括了一下内容

// gorm.Model definition
type Model struct {
  ID        uint           `gorm:"primaryKey"`
  CreatedAt time.Time
  UpdatedAt time.Time
  DeletedAt gorm.DeletedAt `gorm:"index"`
}

使用自动迁移功能,创建表,并补全信息,不删除无用列

DB.AutoMigrate(&model.User{})

测试一下,运行主函数,结果如下

多了一个表,虽然创建速度很慢,超过设定值,但还是运行成功了

3.数据库的增删改查

3.1.增

两种方法,一种是使用创建Create,一种是使用插入

代码如下

mysql.DB.Create(&model.User{Email:"test@qq.com", PasswordHashed:"123"})//增加

运行后查看table

创建成功

3.2改

mysql.DB.Model(&model.User{}).Where("email = ?","test@qq.com").Update("password","22222222")

看样子就是一个MySQL语法,查找未知更改密码

mysql.DB.Model(&model.User{}).Where("Email = ?","test@qq.com").Update("PasswordHashed","22222")//改

运行后将Email=test@qq.com的地方的PasswordHashed"改成22222,数据库的可视化内容就不放图了,不开会员不能改字体,看不清楚

3.3查

尝试查询第一个满足要求的数据行

var row model.User    
mysql.DB.Model(&model.User{}).Where("Email = ?","test@qq.com").First(&row)//查  fmt.Println(row)

打印输出,结果如下

忽略掉123,那是我的测试输出

3.4删

    mysql.DB.Where("Email = ?","test@qq.com").Delete(&model.User{})//软删除    mysql.DB.Unscoped().Where("Email = ?","test@qq.com").Delete(&model.User{})//硬删除

把要删的模型放在后面

运行完成后改行删除

最后补充一行删除掉某一个table

mysql.DB.Migrator().DropTable("table name")

总结

使用GORM(Go的ORM库)连接数据库的步骤可以概括为以下步骤:

一、安装GORM,导入包

这个在本文中没有描述,就和正常导入方法一样

三、建立数据库连接

使用GORM的Open函数来连接数据库。这个函数需要传入数据库驱动和数据库连接字符串(DSN)等信息。也就是第一节中的配置gorm用户密码等

需要将user、password、database-host、port和database-name替换为实际的数据库连接信息。

四、定义数据模型

在GORM中,数据模型通常是通过结构体(struct)来定义的。结构体中的字段会与数据库表中的列进行映射。

五、自动迁移数据表

GORM提供了AutoMigrate方法来根据模型自动创建或更新数据库表。

六、执行数据库操作(增删改查)

通过以上内容初步完成了gorm的学习,但仍有待学习更高级的操作