当前位置: 首页 > article >正文

Golang GORM系列:GORM CRUM操作实战

在数据库管理中,CRUD操作是应用程序的主干,支持数据的创建、检索、更新和删除。强大的Go对象关系映射库GORM通过抽象SQL语句的复杂性,使这些操作变得轻而易举。本文是掌握使用GORM进行CRUD操作的全面指南,提供了在Go应用程序中有效管理数据的实际示例和见解。

在这里插入图片描述

在GORM中创建记录

创建记录是任何应用程序的基础。使用GORM,这个过程变得直观和高效。

步骤1:定义模型

首先定义一个GORM模型,它对应于一个数据库表。例如,考虑一个“产品”模型:

type Product struct {
    gorm.Model
    Name  string
    Price float64
}

步骤2:创建记录

要创建一个新记录,实例化模型的一个结构体并使用‘ create ’方法:

newProduct := Product{Name: "Widget", Price: 29.99}
db.Create(&newProduct)

在GORM中读取/查询记录

从数据库中获取数据是应用程序开发的一个关键方面。GORM用它的查询功能简化了这个过程。

步骤1:查询记录

使用GORM的‘ Find ’方法从数据库中检索记录:

var products []Product
db.Find(&products)

步骤2:基于条件的查询

使用条件优化查询。例如,检索价格高于某个阈值的产品:

var expensiveProducts []Product
db.Where("price > ?", 50).Find(&expensiveProducts)

更新GORM中的记录

更新记录确保您的数据保持准确和最新。GORM简化了这个过程。

步骤1:检索记录

使用GORM的‘ First ’或‘ Find ’方法获取您想要更新的记录。

var productToUpdate Product
db.First(&productToUpdate, 1) // Assuming product with ID 1

步骤2:更新和保存

修改你想要更新的字段,并使用GORM的‘ Save ’方法来持久化更改:

productToUpdate.Name = "Updated Widget"
productToUpdate.Price = 39.99
db.Save(&productToUpdate)

删除GORM中的记录

删除记录对于维护干净和准确的数据库至关重要,GORM用它直观的方法简化了这个过程。

步骤1:检索记录

使用GORM的“First”或“Find”方法获取要删除的记录。

var productToDelete Product
db.First(&productToDelete, 1) // Assuming product with ID 1

步骤2:删除

使用GORM的‘ Delete ’方法从数据库中删除记录:

db.Delete (&productToDelete)

软删除记录

当你需要保留数据的历史记录,或者可能需要恢复已删除的数据时,适合使用软删除。软删除不会真正从数据库中移除记录,而是通过在表中添加一个额外的字段(通常是 DeletedAt)来标记该记录已被删除。查询时,GORM 会自动过滤掉这些被标记为删除的记录。软删除同样使用 Delete 方法,但模型需要包含 gorm.DeletedAt 字段。

GORM支持软删除,即记录被标记为已删除,而不会从数据库中实际删除它们。

db.Delete(&productToDelete) // Soft delete

软删除记录操作

软删除的记录可以使用GORM的‘ Unscoped ’方法恢复:

db.Unscoped().Model(&productToDelete).Update("DeletedAt", nil) // Restore soft deleted record

如果你想对已经软删除的记录执行硬删除操作,可以使用 Unscoped 方法:

db.Unscoped().Delete(&productToDelete)

最后总结

CRUD操作构成了任何数据驱动的应用程序的核心,而GORM在这一领域的能力确实非常出色。使用GORM,创建、读取、更新和删除记录成为一个无缝的过程,将你从原始SQL查询的复杂性中解放出来。通过遵循本指南中提供的逐步示例,你已经掌握了在Go应用程序中有效管理数据所需的基本技能。


http://www.kler.cn/a/544075.html

相关文章:

  • ds-download-link 插件:以独特图标选择,打造文章下载链接
  • 每日一题——括号生成
  • vue 主子表加校验问题
  • macbook2015升级最新MacOS 白苹果变黑苹果
  • 自动化xpath定位元素(附几款浏览器xpath插件)
  • Linux进阶——web服务器
  • 机试题——移动01字符串
  • Java 实现:在 Word 模板指定位置贴二维码并生成 PDF 电子凭证文档
  • Flutter 的 Widget Key 提议大调整?深入聊一聊 Key 的作用
  • Python中的HTTP客户端库:httpx与request | python小知识
  • 本地部署DeepSeek摆脱服务器繁忙
  • 在 Mac ARM 架构上使用 nvm 安装 Node.js 版本 16.20.2
  • Spring Cloud — 深入了解Eureka、Ribbon及Feign
  • Microsoft Word xml 字符非法解决
  • PyCharm 批量替换
  • java后端开发day12--面向对象
  • 【k8s应用管理】kubernetes Pod控制器
  • 推荐一个免费的、开源的大数据工程学习教程
  • 使用Python爬虫获取1688工厂档案信息:深入解析
  • 传统CV到深度学习:特征工程与卷积神经网络实战(进阶篇)
  • 面试准备——Java理论高级【笔试,面试的核心重点】
  • 什么是XMLHttpRequest?及其详细使用说明
  • 功能测试的范畴与目标
  • 通过环境变量实现多个 python 版本的自由切换以及 Conda 虚拟环境的使用教程
  • 深入探究 Rust 测试:灵活控制测试的执行方式
  • 【数据结构入门】一、数组