GORM连接数据库,实现增删改查操作

本文章是一篇GO语言后端实践文章,主要内容是介绍怎么使用GORM来连接,并且实现数据库的增删改查操作。

GORM介绍

GORM(Go Object Relational Mapping)是 Go 语言中最受欢迎的 ORM(对象关系映射)库之一。它提供了简单且强大的方式来将 Go 语言的结构体与关系型数据库之间进行映射,使得开发者能够使用面向对象的方式来进行数据库操作,而无需直接编写原始的 SQL 语句。

GORM的主要特点有支持多种数据库驱动,易于使用,自动迁移,数据库关联等等。总体而言,GORM 是一个功能齐全且易于使用的 ORM 库,它使得 Go 语言开发者可以更加高效地与数据库交互,提高了开发效率和代码质量。

GORM连接数据库

1.安装驱动

要使用GORM连接数据库,首先进行安装GORM 的 MySQL 驱动。

cmd 复制代码
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql

效果:

需要注意的是,依赖要安装在项目文件夹中,安装成功后文件夹内会多出一个go.sum的文件。

2.连接数据库

使用GORM连接数据库,第一步先导入GORM和mysql驱动的包,在实际操作中会用到关键库,然后定义数据库的连接信息,用这个信息来连接mysql,获取数据库连接对象进行需要的操作,连接成功后在程序退出前要关闭连接。

代码如下:

go 复制代码
package main

import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

func main() {
	// 数据库连接信息
	dsn := "root:123456@tcp(127.0.0.1:3306)/sqll?charset=utf8mb4&parseTime=True&loc=Local"

	// 连接数据库
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic("连接数据库失败:" + err.Error())
	}

	// 程序退出前关闭数据库连接
	sqlDB, err := db.DB()
	if err != nil {
		panic("获取数据库连接对象失败:" + err.Error())
	}
	defer sqlDB.Close()

	fmt.Println("连接成功")
}

数据库连接的通用格式是:

go 复制代码
dsn := "user:password@tcp(ip:port)/database_name?charset=utf8mb4&parseTime=True&loc=Local"

即:用户名:密码@tcp(ip:port)/数据库?charset=utf8mb4&parseTime=True&loc=Local 这个数据库连接包括数据库用户名、密码、数据库地址、端口号以及数据库名称等信息。

通过 gorm.Open() 方法,我们使用指定的数据库连接字符串 dsn 来连接到 MySQL 数据库。如果连接过程中出现错误,我们会使用 panic() 方法终止程序并输出错误信息。

使用 db.DB() 方法,我们获取了底层的 *sql.DB 对象 sqlDB。在 GORM 中,db.DB() 用于返回 *sql.DB 对象,它是底层数据库操作的核心对象。

通过 defer 关键字,我们在程序退出前将会自动调用 sqlDB.Close() 方法来关闭数据库连接。最后打印连接成功。

GORM增删改查

对数据库进行操作首先要做的是连接数据库,连接成功后,,获取到获取了底层的 *sql.DB 对象 sqlDB,关闭连接,用sqlDB完成各种操作。

本篇文章增删改查这部分实例代码默认在下面实例代码的基础上进行的:

go 复制代码
package main

import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)
func main() {
	// 数据库连接信息
	dsn := "root:123456@tcp(127.0.0.1:3306)/sqll?charset=utf8mb4&parseTime=True&loc=Local"

	// 连接数据库
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic("连接数据库失败:" + err.Error())
	}

	// 程序退出前关闭数据库连接
	sqlDB, err := db.DB()
	if err != nil {
		panic("获取数据库连接对象失败:" + err.Error())
	}
	defer sqlDB.Close()
}

上述代码,连接了一个sqll数据库,获取到sql.DB。

表创建

实现创建一个Users表。在 GORM 中,新建一个表可以通过以下几个步骤来实现:

  1. 创建一个与表对应的模型结构:首先,需要创建一个 Go 结构体,用于定义新表的字段和属性。这个结构体需要对应数据库表的结构。
  2. 迁移数据库:一旦你定义了模型结构,你需要使用 GORM 提供的迁移功能来自动创建数据库表。迁移是 GORM 中用于处理数据库模式变更的工具。
go 复制代码
imort(...)
type User struct {
	ID   int `gorm:"primaryKey"`
	Name string
	Age  int
}
func main(){
...
defer sqlDB.Close()
err = db.AutoMigrate(&Users{})
	if err != nil {
		panic("数据库迁移失败:" + err.Error())
	}
}

这段代码中,定义了一个新的模型结构 User,该结构体对应新表的字段和属性。然后,我们使用 db.AutoMigrate(&Users{}) 进行数据库迁移,自动创建新的数据库表。

表数据增加

要向 "users" 表中插入新的数据,可以使用 Create 方法。创建一个新的 User 对象,并通过 Create 方法将其保存到数据库中。

go 复制代码
...
  defer sqlDB.Close()
	newUser := User{ID: 2, Name: "John", Age: 25}
	db.Create(&newUser)

创建一个User对象,设定好三个成员的值,使用db.Create保存到表内。

表数据打印

go 复制代码
...
defer sqlDB.Close()
	// 查询数据库表 "users" 的内容
	var users []User
	if err := db.Find(&users).Error; err != nil {
		panic("查询数据库失败:" + err.Error())
	}

	// 打印查询结果
	fmt.Println("user表内容:")
	for _, user := range users {
		fmt.Printf("ID: %d, Name: %s, Age: %d\n", user.ID, user.Name, user.Age)
	}

在上面的代码中,我们定义了一个与 "users" 表对应的模型结构 User。然后,使用 db.Find(&users) 查询数据库表 "users" 的内容,并将查询结果保存在 users 切片中。

最后,我们遍历 users 切片,并使用 fmt.Printf 来格式化打印 "users" 表中的每条记录的 ID、Name 和 Age 字段。 结果:

表数据查询

要从 "user" 表中查询数据,可以使用 FindFirstWhere 等方法。

go 复制代码
//根据条件查询用户
  var users []User
	if err := db.Where("age< ?", 20).Find(&users).Error; err != nil {
		panic("查询数据库失败:" + err.Error())
	}

 // 查询第一个用户 
 var firstUser User 
 db.First(&firstUser) 
 // 根据条件查询某一个用户
 var user User 
 db.Where("age > ?", 30).First(&user)
        

表数据删除

从数据库表中删除数据,可以使用Delete方法。

go 复制代码
nUser := User{ID: 2, Name: "John", Age: 25}
db.Delete(&nUser)

表数据修改

要修改数据库表的某条数据,可以使用 Model 方法来指定更新的对象,然后通过 UpdatesUpdate 方法更新字段。

go 复制代码
user := User{ID: 4}
	db.Model(&user).Updates(User{Age: 28})

这段代码将users表中id为4的记录的年龄修改成了28,修改的内容在Updates方法中。

表删除

要在 GORM 中删除 "user" 表,可以使用 Migrator 对象的 DropTable 方法。Migrator 对象用于处理数据库的迁移操作,而 DropTable 方法用于删除表。

代码:

go 复制代码
// 获取 Migrator 对象
	migrator := db.Migrator()

	// 删除 "users" 表
	if migrator.HasTable(&User{}) {
		migrator.DropTable(&User{})
		fmt.Println("users表删除成功")
	} else {
		fmt.Println("users表不存在")
	}

在上述代码中,我们使用 db.Migrator() 获取了 Migrator 对象,然后使用 migrator.HasTable(&User{}) 判断 "users" 表是否存在。如果存在,我们使用 migrator.DropTable(&User{}) 方法来删除 "users" 表。

总结

GORM提供了单易用的 API,使得数据的增删改查等操作变得简单明了,还提供了丰富的查询方法,允许通过链式调用来构建复杂的查询条件,供了自动迁移功能,可以根据模型结构自动创建、更新数据库表结构,使得数据库的变更管理变得简单,无需关注数据库的底层细节。

GO语言使用GORM连接数据库进行操作的基本流程:

1.在项目文件夹下安装对应依赖

2.在项目内导入GORM和mysql驱动的包,然后定义数据库的连接信息

3.获取db对象,判断是否连接成功

4.获取到底层的 *sql.DB 对象 sqlDB,关闭连接

5.进行具体的数据库操作

相关推荐
Find25 天前
MaxKB 集成langchain + Vue + PostgreSQL 的 本地大模型+本地知识库 构建私有大模型 | MarsCode AI刷题
青训营笔记
理tan王子25 天前
伴学笔记 AI刷题 14.数组元素之和最小化 | 豆包MarsCode AI刷题
青训营笔记
理tan王子25 天前
伴学笔记 AI刷题 25.DNA序列编辑距离 | 豆包MarsCode AI刷题
青训营笔记
理tan王子25 天前
伴学笔记 AI刷题 9.超市里的货物架调整 | 豆包MarsCode AI刷题
青训营笔记
夭要7夜宵1 个月前
分而治之,主题分片Partition | 豆包MarsCode AI刷题
青训营笔记
三六1 个月前
刷题漫漫路(二)| 豆包MarsCode AI刷题
青训营笔记
tabzzz1 个月前
突破Zustand的局限性:与React ContentAPI搭配使用
前端·青训营笔记
Serendipity5651 个月前
Go 语言入门指南——单元测试 | 豆包MarsCode AI刷题;
青训营笔记
wml1 个月前
前端实践-使用React实现简单代办事项列表 | 豆包MarsCode AI刷题
青训营笔记
用户44710308932421 个月前
详解前端框架中的设计模式 | 豆包MarsCode AI刷题
青训营笔记