goland 项目GORM 中dao.db.Find 和 dao.db.Model 有什么区别?

序言:

我们在初次学习goLand是可能会遇到查询数据分页,在分页过程会计算查询出来的条数。这个过程会用到dao.db.Finddao.db.Model,那么他们之间到底啥关系要怎么使用呢?

目录

一、dao.db.Find

二、dao.db.Model

三、运用

说明

四、总结:


一、dao.db.Find

        在 GORM 中,dao.db.Finddao.db.Model 有不同的用途和上下文,理解它们的区别对于有效使用 GORM 非常重要。

  • 用途:用于直接查询并返回结果集。

  • 上下文:适用于已经有了模型类型的上下文,通常在查询所有记录或符合某个条件的记录时使用。

例如:

var users []User
err := dao.db.Find(&users).Error

这行代码会查询 User 表中的所有记录,并将结果填充到 users 切片中。

二、dao.db.Model

  • 用途:用于创建查询的上下文,通常与链式查询结合使用,尤其是需要在查询中使用条件(例如 CountSelectWhere 等)时。

  • 上下文:可以在 Model 中指定一个模型,并在此基础上进行进一步的查询操作,比如获取总记录数或应用条件。

例如 :

var total int64
err := dao.db.Model(&User{}).Count(&total).Error

三、运用

使用三层架构编码方式controller层、service层和dao层需要进行分页请求示例:

3.1 dao层中调用:

UserDAO 中添加 pagepageSize 参数,并在查询时应用这些参数。

// GetAllUsers 获取所有用户,支持分页
func (dao *UserDAO) GetAllUsers(page, pageSize int) ([]entity.User, int64, error) {var users []entity.Uservar total int64// 先获取总记录数if err := dao.db.Model(&entity.User{}).Count(&total).Error; err != nil {log.Printf("Failed to count users: %v", err)return nil, 0, err}// 使用 GORM 查询用户,应用分页if err := dao.db.Offset((page - 1) * pageSize).Limit(pageSize).Find(&users).Error; err != nil {log.Printf("Failed to get users: %v", err)return nil, 0, err}return users, total, nil
}

说明

  1. 参数

    • GetAllUsers 现在接受两个参数:pagepageSize,用于控制分页。
  2. 获取总记录数

    • 在查询用户之前,使用 Count 方法获取用户的总数,以便后续的分页响应中使用。
  3. 应用分页

    • 使用 OffsetLimit 方法进行分页查询,计算出要跳过的记录数和每页的大小。

 

3.2 Service 层中调用

func (s *UserService) GetUsers(page, pageSize int) ([]entity.User, int64, error) {return s.dao.GetAllUsers(page, pageSize)
}

 3.3Controller 层中调用

func getUsers(c *gin.Context) {reqPage := pagination.NewReqPage(c)users, total, err := userService.GetUsers(reqPage.Page, reqPage.PageSize)if err != nil {c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to get users"})return}paginatedResponse := pagination.NewPage(reqPage.Page, reqPage.PageSize, total, users)c.JSON(http.StatusOK, paginatedResponse)
}

这样就完成了在三层架构中对分页请求的支持。

四、总结:

  • Find:直接用于查询并返回结果集,通常是一次性操作。
  • Model:用于构建更复杂的查询,可以用于链式调用,比如计算、条件查询等。

通常会先使用 Model 来设置查询的上下文,然后使用 FindCountWhere 等方法来构建和执行查询。这样可以保持代码的清晰和可读性。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习-44-大模型预训练的数据预处理及大模型的分类

文章目录 1 大模型的分类1.1 按任务类型分类1.1.1 生成式模型1.1.2 判别式模型1.1.3 混合模型1.2 按数据模态分类1.2.1 单模态模型1.2.2 多模态模型1.3 按训练方法分类1.3.1 预训练模型1.3.2 从零训练模型1.3.3 迁移学习模型1.4 按应用领域分类1.4.1 自然语言处理模型1.4.2 计算…

zabbix安装基础配置

服务器准备,两台服务器 创建zabbix用户组,新增zabbix用户,并将zabbix用户加入zabbix用户组,设置zabbix用户不允许登录系统权限 [rootlocalhost ~]# groupadd zabbix [rootlocalhost ~]# useradd -g zabbix zabbix [rootlocalhost…

点云的多尺度计算

1.计算点云多尺度特征的方法 1) K近邻,然后通过VoxelGrid进行下采样。 参考文献: Timo Hackel, J. D. W., Konrad Schindler "FAST SEMANTIC SEGMENTATION OF 3D POINT CLOUDS WITH STRONGLY VARYING DENSITY." Schindler, T. H. J. D. W. K. "Contour dete…

如何将各类GIS格式数据转换为带坐标信息的CVS或EXCEL格式

介绍如何利用GIS数据转换器-矢量将各类GIS格式数据(SHP\TAB\KML\GEOJSON\GPKG\dxf等)转换为带坐标信息的CVS或EXCEL格式。 打开GIS数据转换器-矢量 2.选择要转换的矢量数据 3.选择要输出的格式为CSV或微软开放表格格式 4.选择输出字段 5.选择输出目录 6…

Latex之LNCS模板——Title Suppressed Due to Excessive Length

1、问题描述 使用LNCS模板时,文章右上角显示“Title Suppressed Due to Excessive Length”。原因:文章的标题太长,放不下。 2、解决办法 使用 \titlerunning{} 设置一个短标题。

DPI-MoCo:基于深度先验图像约束的运动补偿重建用于四维锥形束CT (4D CBCT)|文献速递-基于深度学习的病灶分割与数据超分辨率

Title 题目 DPI-MoCo: Deep Prior Image ConstrainedMotion Compensation Reconstruction for 4D CBCT DPI-MoCo:基于深度先验图像约束的运动补偿重建用于四维锥形束CT (4D CBCT) 01 文献速递介绍 安装在直线加速器上的N板锥束计算机断层扫描(CBCT&…

6大国有银行软开的薪资待遇清单

牛客上刷到一条关于计算机专业值得去的银行软开清单,其中对 6 大国有银行软开的薪资待遇分析我觉得很有必要同步给大家看一看。 截图信息来自牛客的漫长白日梦 其中邮储软开是最值得推荐的(offer 投票没输过),二线城市转正后第一个完整年的收入在 30 万左右,一线城市更高…

深度学习之Dropout

1 Dropout 系列问题 1.1 为什么要正则化? 深度学习可能存在过拟合问题——高方差,有两个解决方法,一个是正则化,另一个是准备更多的数据,这是非常可靠的方法,但你可能无法时时刻刻准备足够多的训练数据或…

京东AI单旋旋转验证码98准确率通杀方案

注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路 如有侵犯,请联系作者下架 本文滑块识别已同步上线至OCR识别网站: http://yxlocr.nat300.top/ocr/other/12 京东单旋验证码最近更新了,使用AI生成,要求识别角度,以下是部分数据集: 接下…

three.js 如何简单的实现场景的雾

three.js 如何简单的实现场景的雾 https://threehub.cn/#/codeMirror?navigationThreeJS&classifybasic&idsceneFog import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControls.js import { GLTFLoader } from three…

算法定制LiteAIServer摄像机实时接入分析平台烟火检测算法的主要功能

在现代社会,随着人工智能技术的飞速发展,智能监控系统在公共安全领域的应用日益广泛。其中,烟火检测作为预防火灾的重要手段,其准确性和实时性对于减少火灾损失、保障人民生命财产安全具有重要意义。而算法定制LiteAIServer烟火检…

C++中sizeof运算符的案例分析

分析案例 在网上看到一个关于sizeof疑问的文章&#xff0c;所以就想认真研究下&#xff0c;例子代码如下&#xff1a; #include<iostream> using namespace std; int main(void) {cout << sizeof("123456789") << endl; //10cout << siz…

centos7 部署 Ollama,过程及遇到的问题(上篇)

背景&#xff1a;为了搭建 Dify llama3 实现大模型本地化学习。 材料&#xff1a; 1、centos 7.x 2、网络要通 制作&#xff1a; 1、更新YUM源 1、备份yum源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup2、下载阿里yum wget -O /e…

openGauss数据库-头歌实验1-5 修改数据库

一、查看表结构与修改表名 &#xff08;一&#xff09;任务描述 本关任务&#xff1a;修改表名&#xff0c;并能顺利查询到修改后表的结构。 &#xff08;二&#xff09;相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 1.如何查看表的结构&#xff1b; 2.如…

一文学会编写大模型备案安全评估报告「小白也可学会」

文章目录 一、语料安全评估 (一) 评估内容 (二) 评估结论 二、模型安全评估 三、安全措施评估 四、总体结论 适用于不会大模型备案过程中对大模型备案安全评估报告不会如何编写的业务人员。 *图&#xff1a;大模型备案全套素材文件 一、语料安全评估 (一) 评估内容 文本…

Pytest参数详解 — 基于命令行模式!

1、--collect-only 查看在给定的配置下哪些测试用例会被执行 2、-k 使用表达式来指定希望运行的测试用例。如果测试名是唯一的或者多个测试名的前缀或者后缀相同&#xff0c;可以使用表达式来快速定位&#xff0c;例如&#xff1a; 命令行-k参数.png 3、-m 标记&#xff08…

SpringBoot项目集成ONLYOFFICE

ONLYOFFICE 文档8.2版本已发布&#xff1a;PDF 协作编辑、改进界面、性能优化、表格中的 RTL 支持等更新 文章目录 前言ONLYOFFICE 产品简介功能与特点Spring Boot 项目中集成 OnlyOffice1. 环境准备2. 部署OnlyOffice Document Server3. 配置Spring Boot项目4. 实现文档编辑功…

STL之string的使用(超详解)

目录 1. C/C中的字符串 1.1. C语言中的字符串 1.2. C中的字符串 2. string的接口 2.1. string的迭代器 2.1.1begin()与end()函数 2.2.2 rbegin()与rend()函数 2.2. string的初始化与销毁 2.3. string的容量操作 2.3.1 size()&#xff0c;length()&#xff0c;capa…

《JavaEE进阶》----20.<基于Spring图书管理系统(登录+添加图书)>

PS&#xff1a;关于接口定义 接口定义&#xff0c;通常由服务器提供方来定义。 1.路径&#xff1a;自己定义 2.参数&#xff1a;根据需求考虑&#xff0c;我们这个接口功能完成需要哪些信息。 3.返回结果&#xff1a;考虑我们能为对方提供什么。站在对方角度考虑。 我们使用到的…

Sigrity Power SI 3D-EM Full Wave Extraction模式如何进行S参数提取和观测3D电磁场和远场操作指导(一)

Sigrity Power SI 3D-EM Full Wave Extraction模式如何进行S参数提取和观测3D电磁场和远场操作指导(一) Sigrity Power SI的3D-EM Full Wave Extraction模式是Power SI的3D全波提取工具,相比于2D提取,3D全波提取的结果更为精确,且支持设置跨平面的port,也就是lump port,这…