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

Golang GORM系列:GORM CRUM操作实战

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

在这里插入图片描述

在GORM中创建记录

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

步骤1:定义模型

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

type Product struct {gorm.ModelName  stringPrice 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.lryc.cn/news/534421.html

相关文章:

  • C++ labmbd表达式
  • 《大规模动画优化(一):GPU 顶点动画的生成》
  • 【前端】几种常见的跨域解决方案
  • 如何在WinForms应用程序中读取和写入App.config文件
  • 【分布式理论7】分布式调用之:服务间的(RPC)远程调用
  • 人工智能应用-智能驾驶精确的目标检测和更高级的路径规划
  • dynamic_cast和static_cast和const_cast
  • DEEPSEEK与GPT等AI技术在机床数据采集与数字化转型中的应用与影响
  • 高速存储文章目录
  • 车载测试工具 --- CANoe VH6501 进行Not Acknowledge (NAck) 测试
  • 【清晰教程】通过Docker为本地DeepSeek-r1部署WebUI界面
  • Linux运维——用户管理
  • mac下dify+deepseek部署,实现私人知识库
  • Linux中设置开机运行指令
  • IDEA中列举的是否是SpringBoot的依赖项的全部?在哪里能查到所有依赖项,如何开发自己的依赖项让别人使用
  • Ollama命令使用指南
  • LIMO:上海交大的工作 “少即是多” LLM 推理
  • Android studio怎么创建assets目录
  • 常见的前端框架和库有哪些
  • 【批量获取图片信息】批量获取图片尺寸、海拔、分辨率、GPS经纬度、面积、位深度、等图片属性里的详细信息,提取出来后导出表格,基于WPF的详细解决方案
  • 数据结构与算法(test3)
  • 基于Python的人工智能驱动基因组变异算法:设计与应用(下)
  • C++ 顺序表
  • Mac(m1)本地部署deepseek-R1模型
  • Docker 部署 redis | 国内阿里镜像
  • 48V电气架构全面科普和解析:下一代智能电动汽车核心驱动
  • 滤波器截止频率的计算
  • 服务器绑定 127.0.0.1 和 0.0.0.0 的区别
  • DeepSeek提示词手册
  • 校园网规划方案