使用GORM连接数据库 | 青训营

291 阅读5分钟

一、使用GORM连接数据库:

1.GORM概述:

GORM是Go语言的ORM(Object Relational Mapping)库,用于在Go应用程序中处理数据库操作。它支持多种数据库类型,包括MySQL、PostgreSQL、SQLite和MongoDB等。

GORM提供了一些功能来简化数据库操作,包括自动创建和迁移表结构、定义模型和关系、执行查询和更新操作等。它还支持事务、关联查询、缓存和日志等功能。

2.GORM的特性:

  • 简单易用:GORM的API非常简单易用,开发者可以轻松地进行数据库操作,而不需要过多地关注数据库底层的细节。
  • 高效性能:GORM是基于SQL构建的ORM库,使用原生SQL语句执行数据库操作,因此性能非常高效。
  • 灵活可配置:GORM提供了许多配置选项,可以根据需要进行自定义配置,例如,可以配置数据库连接池大小、日志级别、默认表名前缀等。
  • 易于测试:由于GORM的API非常简单易用,因此很容易编写单元测试和集成测试。
  • 全功能ORM:支持全功能的ORM操作,包括关联、事务、迁移、批量插入、预加载、复合主键等。
  • 开箱即用:GORM的设计目标是开箱即用,它提供了许多默认行为,使得开发者可以快速上手。
  • 链式操作:GORM支持链式操作,这使得代码更加简洁和易读。
  • 自动迁移:GORM可以自动迁移数据库,这意味着你可以通过代码来创建、更新和删除数据库表。

3.GORM下载及驱动安装:

go get -u gorm.io/gorm go 
get -u gorm.io/driver/mysql 

4.创建模型结构体:

创建一个名为User的模型结构体,用于表示数据库中的用户表:

package main

gotype User struct {
    ID   uint   `gorm:"primarykey"`
    Name string `gorm:"not null"`
    Age  uint   `gorm:"not null"`
}

5.连接数据库:

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("连接数据库失败:" + err.Error())  
}  
// 自动迁移表结构  
db.AutoMigrate(&User{})  
// ...  
}

引入两个包:

  1. gorm.io/driver/mysql:这是一个MySQL数据库的驱动程序。通过这个驱动程序,你可以使用Go语言与MySQL数据库进行交互。你可以使用该驱动程序来连接MySQL数据库,执行查询和操作数据库表。
  2. gorm.io/gorm:这是一个ORM(对象关系映射)库,用于简化与数据库的交互。它提供了一种方便的方式来定义模型、创建、读取、更新和删除数据库记录。通过使用GORM,你可以将数据库表映射到Go结构体,并使用GORM提供的API来执行各种数据库操作。

这两个包通常一起使用,以提供完整的数据库操作功能。首先,通过gorm.io/driver/mysql连接到MySQL数据库,然后使用gorm.io/gorm来执行更高级的操作,如查询数据、创建记录等。

DSN(Data Source Name):

用于连接MySQL数据库。它包含了连接所需的必要信息,包括用户名、密码、数据库的地址和端口、以及特定的配置选项。

下面是该DLS的含义解释:

  • user:password:这是用于身份验证的用户名和密码。
  • tcp(127.0.0.1:3306):这是数据库的地址和端口。这里使用的是本地地址(127.0.0.1)和MySQL默认的端口号(3306)。
  • /database:这是要连接的数据库的名称。
  • charset=utf8mb4:这是用于连接的字符集。utf8mb4是UTF-8的MySQL字符集,用于支持多字节字符,包括一些特殊字符和表情符号。
  • parseTime=True:这个选项表示日期和时间字段将被解析为时间类型。
  • loc=Local:这个选项表示使用本地时区来解析日期和时间。

通过提供这个DLS,你可以使用gorm.io/driver/mysql包的Open函数来连接MySQL数据库,并使用gorm.io/gorm库来执行各种数据库操作。

6.GORM的增删改查:

①增(Create):

user := User{Name: "John", Age: 18}  
db.Create(&user)

②删(Delete):

db.First(&User{}, ID:1)
user := User{Name:"XX", ID:1} 
db.Delete(&user)

注意:

  • 使用First时,需要注意如果查询不到数据,它会返回 ErrRecordNotFound 错误
  • 使用Find查询多条数据时,如果查询不到,它不会返回数据

软删除:

软删除需要为model新增Deleted gorm.DeleteAt字段,在查询时使用db.Where(*).Find(*)会忽略软删记录,使用Unscoped可以查询到被软删除的数据

③改(Update):

db.Model(&User{}).Where("id = ?", 1).Updates(map[string]interface{}{"Name": "John", "Age": 20})

使用db.Model()方法指定要修改的模型结构体,然后使用Where()方法指定要更新的记录的条件。接下来,我们使用Updates()方法将要更新的字段和值传递给它。

你可以将要更新的字段和值以键值对的形式存储在一个map中,其中键是字段名,值是要更新的新值。

注意,Updates()方法会根据传递给它的字段更新记录,因此请确保传递正确的字段名和值。另外,如果某些字段在数据库中是NULL类型,需要将它们的值设置为nil才能正确地更新记录。

此外,如果你需要更新多个记录,可以使用db.Model().Updates()方法批量更新记录。

④查(Read):

查询所有记录:

govar users []User
db.Find(&users)

查询指定条件的记录:

govar users []User
db.Where("name = ?", "John").Find(&users)

上述只列举了GORM的部分查询操作你可以根据自己的需求选择适合的查询方法来获取所需的数据项。

总结

以上就是使用GORM连接mysql数据库,然后实现增删改查操作的大致过程了。