• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Gorm入门 | 青训营

武飞扬头像
scoxty
帮助1

Gorm

Gorm是一个Go语言的ORM库,它提供了丰富的功能,使得与数据库的交互变得简单且方便。

  1. 安装

首先,你需要在你的Go环境中安装Gorm。你可以使用以下命令来安装最新版本的Gorm:

bash复制代码
	go get -u gorm.io/gorm
  1. 创建数据库连接

要使用Gorm,你需要创建一个数据库连接。以下是如何创建一个MySQL数据库的连接的例子:

go复制代码
	import (  

	    "gorm.io/driver/mysql"  

	    "gorm.io/gorm"  

	)  

	  

	func main() {  

	    dsn := "user:password@tcp(127.0.0.1:3306)/database?charset=utf8mb4&parseTime=True&loc=Local"  

	    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})  

	    if err != nil {  

	        panic("failed to connect database")  

	    }  

	    // 自动迁移模式  

	    db.AutoMigrate(&User{})  

	}

在这个例子中,我们首先导入了gormgorm.io/driver/mysql库。然后我们创建了一个DSN(Data Source Name),这是一个字符串,用于指定如何连接到数据库。接下来,我们使用gorm.Open函数和mysql.Open函数来创建一个数据库连接。最后,我们使用db.AutoMigrate函数来自动迁移模式,这意味着Gorm会自动创建或更新数据库中的表。

  1. 定义模型

在Gorm中,你需要定义一个Go结构体来表示你的数据库模型。以下是一个简单的例子:

go复制代码
	type User struct {  

	    ID   uint   `gorm:"primarykey"`  

	    Name string `gorm:"not null"`  

	    Age  uint   `gorm:"not null"`  

	}

在这个例子中,我们定义了一个名为User的结构体,它有三个字段:IDNameAge。每个字段都有一个对应的Go类型,并且都有一个gorm标签,它用于指定该字段在数据库中的行为。例如,primarykey标签表示该字段是主键,而not null标签表示该字段不能为空。

  1. 查询数据

Gorm提供了多种查询数据的方法,以下是一些常用的查询方法:

  • db.Find(&users):查询所有用户数据并存储到users切片中。
  • db.First(&user, id):查询第一个ID为指定值的用户数据。
  • db.Last(&user):查询最后一个用户数据。
  • db.Where("name = ?", "John").Find(&users):查询名字为John的用户数据并存储到users切片中。
  • db.Where("age > ?", 18).Find(&users):查询年龄大于18的用户数据并存储到users切片中。
  • db.Select("name, age").Find(&users):只查询名字和年龄数据并存储到users切片中。
  • db.Order("age desc").Find(&users):按年龄降序查询用户数据并存储到users切片中。
  • db.Scopes(&User{}).First(&user, 1):创建一个动态的查询范围并执行第一个查询。
  • db.Raw("SELECT * FROM users WHERE age > ?", 18).Scan(&users):直接执行原生的SQL查询并存储到users切片中。
  • db.Model(&User{}).Where("name = ?", "John").Count(&count):计算符合查询条件的数据行数。
  1. 创建数据

要创建新的数据,你可以创建一个新的模型实例,然后使用db.Create方法。以下是一个例子:

go复制代码
	user := User{Name: "John Doe", Age: 25}  

	db.Create(&user)

在这个例子中,我们创建了一个新的User实例,然后使用db.Create方法将其保存到数据库中。

  1. 更新数据

要更新已经存在的数据,你可以首先查询数据,然后修改其字段,最后使用db.Save方法。以下是一个例子:

go复制代码
	db.First(&user, 1)  

	user.Age = 26  

	db.Save(&user)

在这个例子中,我们首先查询了ID为1的用户,然后将年龄修改为26,最后使用db.Save方法将修改后的用户数据保存到数据库中。

  1. 删除数据

要删除已经存在的数据,你可以使用db.Delete方法。以下是一个例子:

go复制代码
	db.First(&user, 1)  

	db.Delete(&user)

在这个例子中,我们首先查询了ID为1的用户,然后使用db.Delete方法将该用户从数据库中删除。

  1. 链式查询

Gorm支持链式查询,你可以在一个查询中执行多个操作。以下是一个例子:

go复制代码
	var users []User  

	db.Where("age > ?", 18).Order("age desc").Find(&users)

在这个例子中,我们首先使用db.Where方法查询年龄大于18的用户,然后使用db.Order方法按照年龄降序排序,最后使用db.Find方法将结果存储到users切片中。

  1. 关联查询

Gorm支持关联查询,你可以查询一个模型与另一个模型之间的关联关系。以下是一个例子:

go复制代码
	var user User  

	db.Preload("Posts").First(&user)

在这个例子中,我们首先使用db.Preload方法预加载用户的关联数据(例如用户的帖子),然后使用db.First方法查询第一个用户的数据。这样,我们可以一次性地查询用户及其关联数据。 10. 数据库事务


Gorm支持数据库事务,你可以使用它来执行一组相关的数据库操作,并在出现错误时进行回滚。以下是一个例子:

go复制代码
	db.Begin()  

	user.Name = "John Doe"  

	db.Save(&user)  

	db.Create(&Post{Title: "Hello World", UserId: user.ID})  

	db.Commit()

在这个例子中,我们首先使用db.Begin方法开启了一个新的事务。然后我们修改了用户的名字,并使用db.Save方法保存了修改。接着,我们创建了一个新的帖子,并指定了用户ID。最后,我们使用db.Commit方法提交了事务,将所有的修改保存到数据库中。

  1. 模型关联

模型关联是Gorm的一个强大功能,它允许你在不同的模型之间建立关联关系。这有助于简化数据库操作,并使代码更具可读性和可维护性。

在Gorm中,你可以使用Association字段来定义一个模型与另一个模型的关联关系。以下是一些常用的关联关系:

  1. 一对一关联:
    在一对一关联中,一个模型与另一个模型有一个一对一的关系。这通常用于表示一个用户与他的账户信息的关系。
go复制代码
	type User struct {  

	    gorm.Model  

	    Name  string  

	    Acc   Acc `gorm:"association_autoupdate:false;association_autocreate:false"`  

	}  

	  

	type Acc struct {  

	    gorm.Model  

	    UserID uint  

	    // other fields  

	}

在这个例子中,Acc模型与User模型建立了一对一关联。这意味着每个用户都有一个与之关联的账户信息。注意,我们需要在Acc模型中添加UserID字段作为外键,并使用UserID字段将两个模型关联起来。

  1. 一对多关联:
    在一对多关联中,一个模型与另一个模型有一个一对多的关系。这通常用于表示一个用户与他的多个帖子之间的关系。
go复制代码
	type User struct {  

	    gorm.Model  

	    Name string  

	    // other fields  

	}  

	  

	type Post struct {  

	    gorm.Model  

	    UserID uint  

	    Title  string  

	    // other fields  

	}

在这个例子中,Post模型与User模型建立了一对多关联。这意味着每个用户都可以有多个帖子。我们需要在Post模型中添加UserID字段作为外键,并使用UserID字段将多个帖子与特定用户关联起来。

  1. 多对多关联:
    在多对多关联中,两个或多个模型之间有一个多对多的关系。这通常用于表示用户与角色之间的关系。
go复制代码
	type User struct {  

	    gorm.Model  

	    Name string  

	    // other fields  

	}  

	  

	type Role struct {  

	    gorm.Model  

	    Name string  

	    // other fields  

	}

在这个例子中,我们有两个模型:UserRole。这两个模型之间有一个多对多的关系,表示每个用户可以拥有多个角色,每个角色也可以被多个用户拥有。要实现这个关联关系,我们需要在两个模型之间添加一个中间表(或中间模型),该表包含与两个模型相关的外键。

以上是Gorm中常用的三种关联关系。通过合理地使用这些关联关系,你可以轻松地处理复杂的数据库操作。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgakacb
系列文章
更多 icon
同类精品
更多 icon
继续加载