gorm的find和scan使用

在 GORM 中,.Find() 和 .Scan() 都可以用于检索数据库记录,但它们之间存在一些差异,并不完全等同于彼此。

使用例子

Find 方法的使用例子

  1. 查找单一记录:

var result models.MyModel
db.Where(“id = ?”, 1).Find(&result)
这个例子中,我们查找 id 为 1 的记录,并将结果填充到 result 变量中。

  1. 查找多个记录并排序:

var results []models.MyModel
db.Where(“active = ?”, true).Order(“created_at desc”).Find(&results)
这里,我们查找所有 active 为 true 的记录,并将它们按 created_at 时间戳降序排列,结果被填充到 results 切片中。

Scan 方法的使用例子

  1. 读取单条记录:

var result models.MyModel
db.Table(“my_table”).Where(“id = ?”, 1).Scan(&result)
在这个例子中,我们直接从 my_table 表中读取 id 为 1 的记录,并将结果填充到 result 变量中。

  1. 读取多条记录:

var results []models.MyModel
db.Table(“my_table”).Where(“active = ?”, true).Scan(&results)
这里,我们从 my_table 表中读取所有 active 为 true 的记录,并将它们填充到 results 切片中。

  1. 读取特定列:

type Result struct {
Name string
Age int
}

var results []Result
db.Table(“my_table”).Select(“name, age”).Scan(&results)
在这个例子中,我们定义了一个 Result 结构体来匹配我们想要检索的列,然后从 my_table 表中读取 name 和 age 列的数据。
4. 执行原始 SQL 查询:

var results []struct {
TotalCount int
TotalPages int
}
db.Raw(“SELECT COUNT() AS total_count, (SELECT COUNT() FROM my_table WHERE active = ?) AS total_pages”, true).Scan(&results)

主要区别

Find 和 Scan 都是 GORM(Go 语言的 ORM 库)中用于从数据库检索数据的方法,但它们之间存在一些差异。

Find 方法:
Find 方法主要用于查找和返回所有匹配的记录。它会将结果直接映射到你为其提供的结构体或结构体切片中。例如:

go
复制
var users []User
db.Find(&users)
在这个例子中,Find 方法会查找所有的用户记录,并将它们映射到 users 切片中。

Scan 方法:
Scan 方法用于将结果扫描到另一个结构体中,这个结构体可能与原始模型的结构不同。这在你只需要查询的结果的子集,或者结果需要映射到不同的结构体时非常有用。例如:

go
复制
type UserDTO struct {
Name string
Age int
}

var userDTOs []UserDTO
db.Model(&User{}).Select(“name, age”).Scan(&userDTOs)
在这个例子中,Scan 方法只选择 name 和 age 字段,并将结果映射到 UserDTO 切片中,而不是 User 结构体。

总的来说,Find 和 Scan 的主要区别在于,Find 用于将结果映射到与数据库模型相同的结构体中,而 Scan 则可以将结果映射到一个不同的结构体中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/846855.shtml

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

相关文章

Spring 源码:深度解析AOP源码配置解析

文章目录 一、 解析AOP配置的入口1.1 从XML配置到AOP Namespace的解析流程1.2 分析注解驱动的AOP配置解析流程 二、AOP配置解析的核心流程2.1 ConfigBeanDefinitionParser 类2.2 parse()2.3 parseAdvisor()2.4 parseAspect()2.5 parsePointcut()2.6 createAdvisorBeanDefinitio…

算法每日一题(python,2024.05.29) day.11

题目来源(力扣. - 力扣(LeetCode),简单) 解题思路: 法一:切片函数法 直接用python中的切片函数直接解决 法二:交换法 从俩头开始交换字符串的数字,若为奇数&#xff…

具有激情的技术管理者才是优秀的领导者

与其他类型的管理者相比,技术管理者更要具有激情,有激情的技术领导者才能影响和感染团队成员,实现团队的目标。 激情能够带领团队走出阴霾。在所有人都觉得没有希望而选择放弃的时候,有激情的管理者能够带领团队面对困难&#xf…

GITLAB常见问题总结

Troubleshooting GitLab Pages administration (FREE SELF) 原文地址 stage: Plan group: Knowledge info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/…

STM8单片机变频器设计

变频调速技术是现代电力传动技术的重要发展方向,而作为变频调速系统的核心—变频器的性能也越来越成为调速性能优劣的决定因素,除了变频器本身制造工艺的“先天”条件外,对变频器采用什么样的控制方式也是非常重要的。随着电力电子技术、微电子技术、计算机网络等高新技术的…

Kompas AI:智能生活的开启者

引言 在现代社会,**人工智能(AI)**已经深刻地影响了我们的生活和工作。无论是智能家居、自动驾驶,还是医疗诊断,AI的应用无处不在。而在众多AI平台中,Kompas AI 作为一个先进的对话式AI平台,通过…

R语言数据分析-针对芬兰污染指数的分析与考察

1. 研究背景及意义 近年来,随着我国科技和经济高速发展,人们生活质量也随之显著提高。但是, 环境污染问题也日趋严重,给人们的生活质量和社会生产的各个方面都造成了许多不 利的影响。空气污染作为环境污染主要方面,更…

【漏洞复现】海康威视综合安防管理平台 orgManage/v1/orgs/download 任意文件读取漏洞

0x01 产品简介 海康威视综合安防管理平台是一套“集成化”、“智能化”的平台,通过接入视频监控、一卡通、停车场、报警检测等系统的设备。海康威视集成化综合管理软件平台,可以对接入的视频监控点集中管理,实现统一部署、统一配置、统一管理和统一调度。 0x02 漏洞概述 海康…

7-8 矩阵字符

给定一个仅包含小写字母的字符串S,用这些字符恰好排成一个n行m列的矩阵(m≥n),请找出所有符合要求的矩阵中最接近于正方形的那个矩阵。然后从第一列开始,逐列按照从上到下的顺序输出矩阵中的字符。 例如:S "abcdefgh"。按要求m≥…

动态规划-求买卖股票所能获得的最大收益(hard)

一、问题描述 二、解题思路 1.先看有哪几个可变参数: (1).当前第几天 nowday(范围:0->n-1) (2).剩余交易次数 restTime(范围:k->0) (3).当天可买入还是可卖出 isnowHold(0 表示当前未持有可买入,1 表示当前持有可卖出) 2.…

WIN10环境下xposed环境搭建

禁止拿来干坏事,仅做学习为目的 环境需求 1.夜神模拟器7.1 2.Android stdio 2022.3.1 3. Adb环境配置 具体实现 1.安装xposed 打开可一键安装,重启 2.连接虚拟机 adb connect 127.0.0.1:620013.打开as,进入project 4.在lib下添加准备好的jar包 …

AD软件底层丝印反转

快捷键VB,翻转后底部视图所有显示就正常了,当底层确认之后再按VB就回到正常状态。 否则你就看到一个镜像的丝印。 快捷键VB后 注意,经过VB反转BOTTOM后TOP层的丝印变镜像翻转了。 设计完毕后调整过来即可。

高级优化理论与方法(十四)

高级优化理论与方法(十四) Non-linear Constrained OptimizationKKT-Theorem(FONC)SONCDefinitionSOSCExample 1Example 2 Convex Optimization ProblemsDefinitionLemmaTheoremLemmaExampleTheorem TheoremExample DefinitionTheoremLemmaCorollaryLemm…

查询语言:ClickHouse的SQL基础与特点

1.背景介绍 查询语言:ClickHouse的SQL基础与特点 作者:禅与计算机程序设計艺術 1. 背景介绍 1.1 ClickHouse简介 ClickHouse是Yandex开源的一个高性能分布式 column-oriented DBSMS (Column-based Distributed SQL Management System),它…

怎么下载 jar 包

一、在Maven仓库里面下载 Maven仓库 网址:https://mvnrepository.com/ 二、搜索需要的 jar 包(以 druid 为例) 三、找到 druid jar包,点进去 四、找到自己需要的版本,点进去 五、 点 jar 下载

【漏洞复现】SpringBlade tenant/list SQL 注入漏洞

0x01 产品简介 SpringBlade ,是一个由商业级项目升级优化而来的 SpringCloud 分布式微服务架构、SpingBoot 单体式微服务架构并存的综合型项目。 0x02 漏洞概述 SpringBlade 后台框架 /api/blade-system/tenantist路径存在SQL注入漏洞,攻击者除了可以利用 SQL 注…

【深度学习在计算机视觉中的应用:塑造机器的视觉智能】

文章目录 前言深度学习在计算机视觉中的关键应用图像分类示例:使用卷积神经网络分析代码结论 前言 计算机视觉是一个模仿人类视觉感知能力的领域,它使计算机能够从图像和视频中识别、处理和理解视觉信息。深度学习的兴起极大地推动了计算机视觉技术的发…

关于网络编程

目录 1、InetAdress类 2、Socket套接字 3、UDP数据报套接字编程 (1)DatagramSocket 类 (2)DatagramPacket类 (3)处理无连接问题 UdpEchoServer.java UdpEchoClient.java 4、TCP流套接字编程 &…

WHAT - AI 工具推荐

AI 资源门户 AiMapProAI工具集 设计师 了解AIGC前沿技术,AI设计师公开课 图片 1. 常用 生成矢量图的 AI 绘图工具 - recraftlogo 生成 - logoai抠图 - 打开图像以去除背景adobe photoshop 网页版 - 支持生成式AI 2. Midjourney Midjourney Prompt Generator…

为什么我觉得C/C++好简单?

有几个可能的原因解释为什么您觉得C/C简单。我这里有一套编程入门教程,不仅包含了详细的视频讲解,项目实战。如果你渴望学习编程,不妨点个关注,给个评论222,私信22,我在后台发给你。 适应性:如果…