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.mzph.cn/pingmian/69602.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Windows】PowerShell 缓存区大小调节

PowerShell 缓存区大小调节 方式1 打开powershell 窗口属性调节方式2,修改 PowerShell 配置文件 方式1 打开powershell 窗口属性调节 打开 CMD(按 Win R,输入 cmd)。右键标题栏 → 选择 属性(Properties)…

Json-RPC框架项目(一)

目录 1. 项目介绍: 2. 技术选择; 3. 第三方库介绍; 4. 项目功能; 5. 模块功能; 6. 项目实现: 1. 项目介绍: RPC是远程过程调用, 像调用本地接口一样调用远程接口, 进行完成业务处理, 计算任务等, 一个完整的RPC包括: 序列化协议, 通信协议, 连接复用, 服务注册, 服务发…

深度整理总结MySQL——MySQL加锁工作原理

MySQL加锁工作原理 前言前置知识- 锁为什么加在索引上锁的粒度优化提高并发性避免全表扫描优化死锁处理解决幻读问题 什么SQL语句会加行级锁MySQL是如何加行级锁场景模拟代码唯一索引等值查询退化为记录锁为什么会退化为记录锁分析加了什么锁为什么会退化为间隙锁为什么我可以插…

Deepseek系列从v3到R易背面经版

deepseek v3 base要点 MTP : Multi-Token Prediction 训练时: 1. 把前一个block中input tokens经过embedding layer和transformer block的输出,进入output head之前的内容记为h,与下一个block的input tokens经过embedding layer输出的内容都…

大模型融入推荐系统

结合项目实际给用户推荐,比如是商家项目,用户问了几个关于商品的信息,大模型就可以根据根据用户画像,给用户推荐商品。 我们现在做的是针对于用户学习的推荐,首先我们要对我们的数据进行处理,提取出我们数…

MariaDB MaxScale实现mysql8主从同步读写分离

一、MaxScale基本介绍 MaxScale是maridb开发的一个mysql数据中间件,其配置简单,能够实现读写分离,并且可以根据主从状态实现写库的自动切换,对多个从服务器能实现负载均衡。 二、MaxScale实验环境 中间件192.168.121.51MaxScale…

【JVM详解五】JVM性能调优

示例: 配置JVM参数运行 #前台运行 java -XX:MetaspaceSize-128m -XX:MaxMetaspaceSize-128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio8 - XX:UseConcMarkSweepGC -jar /jar包路径 #后台运行 nohup java -XX:MetaspaceSize-128m -XX:MaxMetaspaceS…

畅聊deepseek-r1,SiliconFlow 硅基流动注册+使用

文章目录 SiliconFlow 硅基流动注册使用注册创建API密钥使用网页端使用代码调用api调用支持的模型 SiliconFlow 硅基流动注册使用 注册 硅基流动官网 https://cloud.siliconflow.cn/i/XcgtUixn 注册流程 切换中文 ​ 邀请码: XcgtUixn 创建API密钥 账户管理 --&g…

C++ Primer 类型转换

欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…

Gitlab中如何进行仓库迁移

需求:之前有一个自己维护的新仓库A,现在需要将这个仓库提交并覆盖另一个旧的仓库B,需要保留A中所有的commit信息。 1.方法一:将原有仓库A导出后再导入到新的仓库B中 适用场景:新的仓库B是一个待建仓库,相当…

SpringCloud - Sentinel服务保护

前言 该博客为Sentinel学习笔记,主要目的是为了帮助后期快速复习使用 学习视频:7小快速通关SpringCloud 辅助文档:SpringCloud快速通关 源码地址:cloud-demo 一、简介 官网:https://sentinelguard.io/zh-cn/index.h…

文件和内容管理:非结构化数据的有序化

在数据管理的众多领域中,文件和内容管理专注于处理非结构化数据,如文档、图像、音频和视频等。这些数据虽然不像结构化数据那样易于管理和分析,但它们在组织的日常运营中扮演着不可或缺的角色。今天,让我们深入《DAMA数据管理知识…

集成右键的好用软件,支持多线程操作!

今天给大家分享一个超级实用的小工具,真的能帮上大忙呢!这个软件是吾爱大神无知灰灰精心制作的,简直就是图片转换界的“小能手”。 它能一键把webp格式的图片转换成png格式,而且速度超快,完全不输那些付费的软件&#…

UPDATE 语句结合 REPLACE() 函数来批量修改 detail 字段中的 xxx 为 xxx

问题出现的背景,由于阿里云的oss服务器域名更换,所以我们需要修改数据库中detail字段中的域名,才能加载图片 您可以使用 SQL 的 UPDATE 语句结合 REPLACE() 函数来批量修改 detail 字段中的 oss.kxlist.com 为 www.crossbiog.com。 以下是 S…

【设计模式】【行为型模式】职责链模式(Chain of Responsibility)

👋hi,我不是一名外包公司的员工,也不会偷吃茶水间的零食,我的梦想是能写高端CRUD 🔥 2025本人正在沉淀中… 博客更新速度 📫 欢迎V: flzjcsg2,我们共同讨论Java深渊的奥秘 &#x1f…

Visual Studio踩过的坑

统计Unity项目代码行数 编辑-查找和替换-在文件中查找 查找内容输入 b*[^:b#/].*$ 勾选“使用正则表达式” 文件类型留空 也有网友做了指定,供参考 !*\bin\*;!*\obj\*;!*\.*\*!*.meta;!*.prefab;!*.unity 打开Unity的项目 注意:只是看&#xff0…

《深度学习》——pytorch框架及项目

文章目录 pytorch特点基本概念 项目项目实现导入所需库下载训练数据和测试数据对训练和测试样本进行分批次展示手写图片判断pytorch是否支持GPU定义神经网络模型定义训练函数定义测试函数创建交叉熵损失函数和优化器通过多轮训练降低损失值得到最终结果注意 pytorch PyTorch 是…

深入探索人工智能的未来:DeepSeek R1与蓝耘智算平台的完美结合

在当今数字化时代,人工智能(AI)和机器学习(ML)正以前所未有的速度改变着我们的生活和工作方式。从智能语音助手到自动驾驶汽车,从精准医疗到金融风险预测,AI的应用无处不在。深度学习作为AI的核…

基于uniapp vue3 的滑动抢单组件

通过在onMounted获取movable-area与movable-view实例&#xff0c;计算出可滑动的距离 效果图&#xff1a; 代码&#xff1a; <template><view class"slider-container"><movable-area class"movable-area" id"movableArea">…

亚博microros小车-原生ubuntu支持系列:26手势控制小车基础运动

背景知识 手指检测&#xff1a;亚博microros小车-原生ubuntu支持系列&#xff1a;4-手部检测-CSDN博客 程序功能说明 功能开启后&#xff0c;摄像头捕获图像&#xff0c;识别手势来控制小车移动。 手势 “5”小车前进拳头小车后退手势 “1”小车向左手势 “2”小车向右 运…