使用GORM连接数据库并实现增删改查操作 | 豆包MarsCode AI 刷题

106 阅读3分钟

GORM 作为一款在数据库操作领域颇具影响力且历经超 10 年持续迭代演进的强大 ORM 框架,在字节内部得以广泛应用。并且,它还具备极为丰富的开源扩展功能,像读写分离这类对于提升数据库性能与数据处理灵活性极为关键的特性也都囊括其中,这使得开发者能够依据不同的业务场景与性能需求,灵活地对数据库架构进行优化配置,从而为构建高效、稳定且可扩展的应用系统奠定坚实基础。

Gorm的默认约定:
①Gorm使用名为ID的字段作为主键
②使用结构体的蛇形负数作为表名
③字段名的蛇形作为列名
④使用CreatedAt、UpdatedAt字段作为创建、更新时间
下面我将使用GORM连接数据库并实现增删改查操作。

一、连接数据库

以下展示的是运用 GORM 连接数据库的代码示例(需注意的是,GORM 目前能够支持 MySQL、SQLServer、PostgreSQL、SQLite 这几大主流数据库,且是通过相应驱动来达成数据库连接的):

package main

import ( 
    "fnt"
    "gorm.io/driver/mysql"
    "gorm.io/gorm" 
) 
type Pupil struct {
    Identifier uint    `gorm:"primarykey"`
    FullName   string  `gorm:"column: full_name"`
    YearsOld   int     `gorm:"column: age"`
}

func main() {
    db, err := gorm.Open(
        mysql.Open(dsn),
        &gorm.Config{})
    if err!= nil {
        panic("无法连接到数据库")
    }
}

二、增删改查四操作

2.1 增加数据(Create)

pupil := Pupil{FullName: "Lily", YearsOld: 16}
db.Create(&pupil)

注:上述代码呈现的是新增一条数据的方式。如果要创建多条数据,那就得采用切片(也就是数组)的方法来处理。

2.2 更新数据(Update)

-条件更新单个列

db.Model(&Pupil{}).Where("id =?", 1).Update("full_name", "Lucy")

-更新多个列

db.Model(&Pupil{Identifier: 1}).Updates(Pupil{FullName: "Grace", YearsOld: 22}) // 仅更新非零值字段 db.Model(&Pupil{Identifier: 1}).Updates(map[string]interface{}{"FullName": "Grace", "YearsOld": 22, "is_active": false}) // 此方法可用来更新零值字段

注:①Updates 这个函数支持传入一个结构体或者 map 类型的数据。
②当使用结构体来进行更新操作时,只会对非零值字段进行更新。要是需要更新零值字段的话,可以选择使用 Map 来更新或者通过 Select 来选择特定字段进行更新。。

2.3 查询数据(Read)

db.Where("FullName =?", "Grace").First(&student) // 查询第一条匹配的记录 db.Where("FullName =? AND years_old <=?", "Grace", "22").Find(&students) // AND查询

注:①First 函数支持传入结构体,但务必要是指针类型。在使用 First 进行查询时,如果查询不到数据,就会返回 ErrRecordNotFound 错误。
②使用 Find 函数可以查询多条数据,即便查询不到数据,也不会返回错误。
③当把结构体当作查询条件使用时,GORM 只会依据非零值字段来构建查询条件。这就意味着,倘若字段值是 0、false 或者其他零值,该字段就不会被用于构建查询条件,这种情况下可使用 Map 来构建查询条件。

2.4 删除数据(Delete)

db.Delete(&Pupil{}, 15)

注:对于一条数据的删除,删除对象需要指定主键。

我们可以使用Unscoped永久性删除数据:

db.Unscoped().Where("full_name =?", "Lily").Delete(&Pupil{})

注:我们还可以使用Unscoped找到被软删除的数据。

GORM 框架以其丰富的功能特性、合理的默认约定以及便捷的操作方式,为开发者在数据库操作领域提供了强大的支持与保障。无论是在构建小型应用系统还是大型企业级项目,GORM 都能够有效地简化数据库交互的复杂性,提高开发效率与代码质量,助力开发者快速实现各种数据处理需求,从而在激烈的技术竞争与项目开发周期压力下脱颖而出,为打造高品质、高性能的软件应用奠定坚实的技术基石,推动业务的持续发展与创新。