首先,简单看一下要用到的相关库和软件
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的学习,但仍有待学习更高级的操作