GORM(Go 的 ORM 库)连接数据库,实现增删改查操作 | 青训营

73 阅读3分钟

一、GORM简介

GORM(Go Object Relational Mapping)是Go语言中的一个ORM库,旨在简化应用程序与数据库之间的交互。ORM库可以将数据库表映射到Go语言的结构体,从而使开发人员能够使用面向对象的方式进行数据库操作,而无需直接编写SQL语句。

二、注意事项

  1. 模型设计: 在开始使用GORM之前,仔细设计模型结构。确保模型与数据库表的字段一一对应,定义好模型之间的关联关系,以免后续操作变得复杂。
  2. 数据校验: GORM提供了数据校验功能,可以在模型中定义数据验证规则。确保在写入数据库之前验证数据的有效性,以避免无效数据的存储。
  3. 查询性能: 虽然GORM提供了强大的查询构建器,但请注意查询的性能。避免在循环中执行大量数据库查询,可以使用预加载(Preloading)来优化关联查询。
  4. 事务管理: 对于涉及多个操作的业务逻辑,使用事务来确保数据的一致性。GORM的事务功能非常简单,可以轻松地在需要的地方包裹起来。
  5. 错误处理: GORM的操作可能会引发错误,如数据库连接失败、查询无结果等。始终进行适当的错误处理,以避免程序异常终止。

三、连接数据库

以连接MySQL数据库为例,把userpasswordhostportdbname替换为数据库配置

package main

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

func main() {
    // 连接数据库
    dsn := "user:password@tcp(host:port)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
        panic("无法连接数据库")
    }
    defer db.Close()

}

四、增删查改操作

4.1 创建记录

向数据库中插入新数据,在执行插入操作之前,确保输入的数据已经通过了验证和净化,以防止无效或恶意数据的插入。通过事务来确保插入操作的原子性,以避免插入部分数据导致数据不一致。

goCopy code
func createUser(db *gorm.DB, name, email string) {
    newUser := User{Name: name, Email: email}
    db.Create(&newUser)
}

4.2 查询记录

从数据库中检索数据,使用索引来优化查询性能,避免全表扫描,对于频繁的查询,可以考虑使用缓存来提高性能

goCopy code
func getUserByID(db *gorm.DB, id uint) (User, error) {
    var user User
    result := db.First(&user, id)
    return user, result.Error
}

4.3 更新记录

修改数据库中已有的数据,在更新操作之前,进行必要的数据校验和验证,确保更新的数据是合法和有效的,使用事务来保证更新操作的原子性,以避免更新部分数据导致数据不一致。

goCopy code
func updateUserEmail(db *gorm.DB, id uint, newEmail string) error {
    var user User
    result := db.First(&user, id)
    if result.Error != nil {
        return result.Error
    }

    user.Email = newEmail
    db.Save(&user)
    return nil
}

4.4 删除记录

从数据库中移除数据,谨慎使用删除操作,特别是在生产环境中。可以使用软删除或逻辑删除来保留数据历史。

goCopy code
func deleteUser(db *gorm.DB, id uint) error {
    result := db.Delete(&User{}, id)
    return result.Error
}