使用GORM连接数据库并实现CRUD操作 | 青训营

GORM 是一个 Go 的 ORM(Object-Relationl Mapping)框架,它可以把我们的数据结构映射到关系型数据库中,支持的数据库有 MySQL、 PostgreSQL、 SQlite、 SQL Server。

GORM 可以让我们屏蔽底层的 SQL 语句,并且使用 GORM 操作数据库除了对不同数据库的连接操作有区别之外,其它的操作对所有数据库都是通用的,我们不用每种数据库都要学习一遍不同的操作方法。

安装

go get -u gorm.io/gorm

连接数据库

想要连接数据库,我们还需要引入对应的数据库 driver,以下为各个数据库的引入地址,之后使用 Open() 方法来开启一个数据库连接。

"gorm.io/driver/mysql"          //MySQL
"gorm.io/driver/postgres"       //PostgreSQL
"gorm.io/driver/sqlite"         //SQLite
"gorm.io/driver/sqlserver"      //SQL Server

连接MySQL

连接MySQL数据库的步骤如下:

  1. 导入GORM库和MySQL驱动:
import (
    "gorm.io/gorm"
    "gorm.io/driver/mysql"
)
  1. 创建数据库连接:
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 {
    // 处理错误
}

其中,user是MySQL用户名,password是密码,127.0.0.1:3306是MySQL服务器的地址和端口,database是要连接的数据库名。

  1. 定义数据模型:
type User struct {
    gorm.Model
    Name string
    Age  int
}
  1. 迁移数据表:
db.AutoMigrate(&User{})

这会自动创建一个名为users的数据表,用于存储User模型的数据。

  1. 进行数据库操作:
// 创建数据
user := User{Name: "Alice", Age: 20}
db.Create(&user)

// 查询数据
var result User
db.First(&result, 1) // 根据ID查询第一条记录

// 更新数据
db.Model(&result).Update("Age", 25)

// 删除数据
db.Delete(&result)

连接SQL Server

  1. 导入GORM库和SQL Server驱动:
import (
    "gorm.io/gorm"
    "gorm.io/driver/sqlserver"
)
  1. 创建数据库连接:
dsn := "sqlserver://username:password@localhost:1433?database=dbname"
db, err := gorm.Open(sqlserver.Open(dsn), &gorm.Config{})
if err != nil {
    // 处理错误
}

其中,username是SQL Server用户名,password是密码,localhost:1433是SQL Server服务器的地址和端口,dbname是要连接的数据库名。

  1. 定义数据模型、迁移数据表、进行数据库操作与MySQL数据库一样。

定义数据模型

数据模型定义是指在GORM中定义结构体来表示数据库表。

在GORM中,可以使用结构体来定义数据模型。每个字段对应数据库表中的一个列。以下是一个示例:

type User struct {
    gorm.Model
    Name     string
    Age      int
    Email    string
    Password string
}

上面的代码定义了一个名为"User"的数据模型,包含了Name、Age、Email和Password四个字段。其中,Name、Age、Email和Password分别对应了数据库表中的四个列。gorm.Model是GORM提供的内置模型,用于自动管理常见字段,如ID、CreatedAt、UpdatedAt和DeletedAt。

可以根据实际需求在结构体中添加更多的字段和标签。标签可以用于指定数据库表的列名、数据类型、约束等信息,以便与数据库进行正确的映射。

例如,可以使用标签来指定列名和数据类型:

type User struct {
    gorm.Model
    Name     string `gorm:"column:name"`
    Age      int    `gorm:"column:age"`
    Email    string `gorm:"column:email"`
    Password string `gorm:"column:password"`
}

上面的代码中,使用gorm:"column:name"标签将Name字段映射到名为"name"的数据库列。可以根据需要添加更多的标签来指定其他信息,如数据类型、约束等。

标签是用反引号 ` 来定义的,放置在字段的后面。以下是一些常用的标签及其用法:

  1. column 标签:用于指定字段在数据库表中的列名。
type User struct {
    ID   uint   `gorm:"primaryKey"`
    Name string `gorm:"column:user_name"`
    Age  int    `gorm:"column:age"`
}
  1. type 标签:用于指定字段在数据库中的数据类型。
type User struct {
    ID   uint   `gorm:"primaryKey"`
    Name string `gorm:"type:varchar(50)"`
    Age  int    `gorm:"type:int"`
}
  1. size 标签:用于指定字段在数据库中的大小限制,仅对字符串字段有效。
type User struct {
    ID   uint   `gorm:"primaryKey"`
    Name string `gorm:"size:100"`
}
  1. default 标签:用于指定字段在数据库中的默认值。
type User struct {
    ID   uint   `gorm:"primaryKey"`
    Name string `gorm:"default:'Unknown'"`
    Age  int    `gorm:"default:18"`
}
  1. unique 标签:用于指定字段是否要创建唯一约束。
type User struct {
    ID   uint   `gorm:"primaryKey"`
    Name string `gorm:"unique"`
}

迁移数据表

在GORM中,可以使用AutoMigrate()方法来迁移数据表,它会根据数据模型自动创建或更新数据库表结构。要迁移数据表,首先需要创建数据库连接,然后调用AutoMigrate()方法,并传入相应的数据模型。

在执行 AutoMigrate() 方法后,GORM会自动检查数据库并根据数据模型定义创建或更新表结构。如果表不存在,则会创建相应的表;如果表已存在,则会检查字段的变化并进行更新。

需要注意的是,在进行数据迁移时,GORM会根据数据模型的定义来创建相应的表结构,但不会保留已有的数据。如果需要保留已有数据,请在迁移前备份数据或使用适当的迁移策略。

在实际开发中,可以根据需要进行多次迁移,以便添加新的数据模型或更新表结构。可以根据具体情况在 AutoMigrate() 方法中传入多个数据模型来进行迁移。

db.AutoMigrate(&User{}, &Product{}, &Order{})

以上代码将同时迁移 UserProduct 和 Order 三个数据模型对应的数据表。通过迁移数据表,可以方便地管理数据库表结构,确保数据模型与数据库的一致性,简化数据库操作。

数据库操作

在GORM中进行数据库操作主要涉及以下几个常用的操作:创建数据、查询数据、更新数据和删除数据。

创建数据

要在GORM中创建数据,可以使用Create()方法。以下是一个示例代码:

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

在上述代码中,我们创建了一个名为userUser结构体对象,并使用Create()方法将其保存到数据库中。&user表示传递user的指针给Create()方法。

需要确保数据库连接db已经建立,并且User模型已经定义和迁移。

Create()方法会将数据插入到数据库表中,并在插入成功后,自动更新模型对象的ID字段和其他可能的时间戳字段(如CreatedAt)。

在创建数据时,GORM会自动为模型对象生成一个唯一的ID,如果模型中定义了gorm.Model,则会自动包含IDCreatedAtUpdatedAtDeletedAt字段。

需要注意的是,在创建数据时,应该检查错误并进行适当的错误处理。例如:

if err := db.Create(&user).Error; err != nil {
    // 处理错误
}

在错误处理中,可以根据具体的业务需求,选择合适的方式进行错误处理,如返回错误信息、记录日志等。

查询数据

在GORM中,可以使用First()Find()Where()等方法来查询数据。以下是一些示例代码:

  1. 查询单条记录:
var user User
db.First(&user, 1)

上述代码使用First()方法查询User模型中ID为1的记录,并将结果保存到user变量中。

  1. 查询多条记录:
var users []User
db.Find(&users)

上述代码使用Find()方法查询User模型的所有记录,并将结果保存到users切片中。

  1. 条件查询:
var user User
db.Where("age > ?", 18).First(&user)

上述代码使用Where()方法添加条件,查询age大于18的第一条记录,并将结果保存到user变量中。

  1. 排序查询:
var users []User
db.Order("age desc").Find(&users)

上述代码使用Order()方法指定按照age字段降序排序,查询所有User记录,并将结果保存到users切片中。

需要注意的是,在查询数据时,应该检查错误并进行适当的错误处理。例如:

var user User
if err := db.First(&user, 1).Error; err != nil {
    // 处理错误
}

更新数据

在GORM中更新数据,可以使用Model()Update()方法。以下是一个示例代码:

var user User
db.First(&user, 1) // 查询要更新的记录

user.Age = 25 // 修改数据

db.Model(&user).Update("Age", user.Age) // 执行更新操作

在上述代码中,我们首先使用First()方法查询ID为1的记录,并将结果保存到user变量中。然后,我们修改了user对象的Age字段值为25。

接下来,我们使用Model()方法传入&user来指定要更新的模型对象,并使用Update()方法来执行更新操作。在Update()方法中,我们传入要更新的字段名和字段值,这里是"Age"user.Age

需要注意的是,在使用Update()方法更新数据时,GORM会自动根据模型对象的主键(通常是ID字段)来确定要更新的记录。因此,在更新数据之前,我们需要确保user对象的主键字段的值是正确的。

另外,如果只需更新模型对象的部分字段,还可以使用Updates()方法。以下是一个示例代码:

db.Model(&user).Updates(User{Age: 25, Name: "Bob"})

在上述代码中,我们使用Updates()方法传入要更新的字段和对应的新值来更新数据。这里我们更新了AgeName字段。

在更新数据时,同样需要检查错误并进行适当的错误处理。例如:

if err := db.Model(&user).Update("Age", user.Age).Error; err != nil {
    // 处理错误
}

删除数据

在GORM中,可以使用Delete()方法来删除数据。以下是一个示例代码:

var user User
db.First(&user, 1) // 查询要删除的记录

db.Delete(&user) // 执行删除操作

在上述代码中,我们首先使用First()方法查询ID为1的记录,并将结果保存到user变量中。

接下来,我们使用Delete()方法传入&user来执行删除操作。GORM会根据模型对象的主键(通常是ID字段)来确定要删除的记录。

需要注意的是,在执行删除操作时,GORM只是标记了要删除的记录,而不是立即从数据库中删除。实际的删除操作将在事务提交时执行。

另外,可以通过Where()方法添加条件来进行有条件的删除操作。以下是一个示例代码:

db.Where("age > ?", 30).Delete(&User{})

在上述代码中,我们使用Where()方法添加条件,删除age大于30的所有记录。

在删除数据时,同样需要检查错误并进行适当的错误处理。例如:

if err := db.Delete(&user).Error; err != nil {
    // 处理错误
}

学习GORM经验

  1. 阅读官方文档:官方文档是学习和理解GORM的最佳资源。阅读官方文档可以了解GORM的各种特性、方法和用法,以及最佳实践和常见问题的解答。官方文档还提供了示例代码和代码片段,可以帮助你快速上手和理解GORM的使用方式。

  2. 实践和尝试:通过实际的项目和练习来应用GORM,可以加深对GORM的理解和掌握。尝试使用不同的功能和方法,进行增删改查等常见操作,通过实践来熟悉和掌握GORM的使用。

  3. 关注社区和开源项目:GORM是一个开源项目,有着活跃的社区支持和贡献。关注GORM的社区和开源项目,可以了解最新的更新和功能改进,还可以从其他开发者的经验和分享中学习到更多有用的知识和技巧。

  4. 注意错误处理:在使用GORM进行数据库操作时,应该注意错误处理。对于每个数据库操作,都应该检查并处理可能出现的错误。正确的错误处理可以帮助你及时发现和解决问题,提高程序的稳定性和可靠性。

  5. 学习数据库知识:虽然GORM提供了方便的数据库操作接口,但理解数据库的基本概念和原理仍然是很重要的。学习数据库知识可以帮助你更好地理解和使用GORM,优化数据库结构和查询,提高程序的性能和效率。

  6. 与其他工具和框架结合使用:GORM可以与其他工具和框架进行无缝集成,如gin、echo等Web框架,以及各种数据库连接池和缓存组件。了解和尝试与其他工具和框架的结合使用,可以提升开发效率和系统性能。

最重要的是,持续学习和实践。GORM是一个功能丰富且不断发展的ORM库,不断探索和学习新的功能和技术,可以帮助你更好地应用GORM,并在开发过程中获得更好的体验和效果。

全部评论

相关推荐

牛大宝儿236:还没入职就PUA,[发火我之前遇到一个月给500块钱的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务