Golang Gorm 自动分批查询

场景:

目标查询全量数据,但需要每次Limit分批查询,保护数据库

文档:

https://gorm.io/zh_CN/docs/advanced_query.html
在这里插入图片描述

// Param: 
// dest      目标地址
// batchSize 大小
// fc        处理函数func (db *DB) FindInBatches(dest interface{}, batchSize int, fc func(tx *DB, batch int) error) *DB {...}

特点:

  • 按照主键ID做offset,效率高。
  • 写法简单
  • 可以支持对每一批查询到的记录处理

注意点:

如果目标是查询到所有结果。由于该方法每次查询到的结果会丢弃,需要手动将查询到的结果补充到外部大列表中。

records := make([]*model.Record, 0)
tempRecord := make([]*model.Record, 0)
db := client.DB(ctx).Model(&model.Record{}).Where("valid_month = ?", month)
// 每次查询500,结果拼接到records大列表
err := db.FindInBatches(&tempRecord, 500,func(tx *gorm.DB, batch int) error {records = append(records, tempRecord...)return nil}).Error   
if err != nil{...}

实际执行显示:
总共1408条数据,每一批查询500个,查询三次,最后将结果拼接到大列表中。

GORM LOG SQL:SELECT* FROM record WHERE valid month=202401 ORDER BY record.id LIMIT 500 Rows:500 Cost:17.45msGORM LOG SOL:SELECT* FROM record WHERE valid month=202401 AND ban_record.id> 123123 ORDER BY record.id LIMIT 500 ROWS: 500 Cost:12.88msGORM LOG SOL:SELECT* FROM record WHERE valid month=202401 AND ban_record.id> 456456 ORDER BY record.id LIMIT 500 ROWS: 408 Cost:15.08ms

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

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

相关文章

安卓 Android Activity 生命周期

文章目录 Intro生命周期方法 & 执行顺序结论code Intro 本文提供一个测试类通过打印的方式展示在多个Activity之间互相跳转的时候,各个Activity的生命周期相关方法的执行顺序。 生命周期方法 & 执行顺序结论 下图出自 郭霖 《第一行代码(第二…

电网的正序参数和等值电路(一)

本篇为本科课程《电力系统稳分析》的笔记。 本篇为第二章的第一篇笔记。 电力系统正常运行中,可以认为系统的三相结构和三相负荷完全对称。而对称三相的计算可以用一相来完成,其中所有给出的标称电压都是线电压的有效值,假定系统全部是Y-Y型…

【网站项目】291校园疫情防控系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

The 2023 Guangdong Provincial Collegiate Programming Contest

I. Path Planning 嗯,怎么说呢,一般二维图,数据不是很大的比如n*m*log级别允许的,如果一眼不是bfs,可以考虑结合一下二分 本题可知,只能向下或者向右,那么我们就像如果答案为x,那么…

windows下使用压缩包安装mysql8.0数据库

获取安装包 可以访问mysql 官网下载压缩安装包 (官网地址:https://downloads.mysql.com/archives/community/) 根据自己的需要,下载对应mysql版本,我选择是是8.0.16版本 安装 解压之后,可以看到压缩包…

文章解读与仿真程序复现思路——中国电机工程学报EI\CSCD\北大核心《基于老化成本实时次梯度的异构储能系统功率分配策略》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

Vue3 大量赋值导致reactive响应丢失问题

问题阐述 如上图所示,我定义了响应式对象arrreactive({data:[]}),尝试将indexedDB两千条数据一口气赋值给arr.data。但事与愿违,页面上的{{}}在展示先前数组的三秒后变为空。 问题探究 vue3的响应应该与console.log有异曲同工之妙&#xff0…

如何系统的入门大模型?

GPT图解,从0到1构建大模型。 本书将以生动活泼的笔触,将枯燥的技术细节化作轻松幽默的故事和缤纷多彩的图画,引领读者穿梭于不同技术的时空,见证自然语言处理技术的传承、演进与蜕变。在这场不断攀登技术新峰的奇妙之旅中&#xf…

如何进行软件测试

1、测试用例带给我们的好处 (1)测试执行者的依据 (2)使得工作可重复,自动化测试的基础 (3)评估需求覆盖率 (4)用例的复用 (5)积累测试的方法思…

嵌入式典型总线及协议

在嵌入式系统中,各种总线和通信协议扮演着关键的角色,它们连接和协调系统中的各种硬件组件,实现数据传输和控制。本文将介绍一些典型的嵌入式总线及其通信协议,以及它们在嵌入式系统中的应用。 以下是我整理的关于嵌入式开发的一…

华为OD机试 - 按照路径替换二叉树(Java 2024 C卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出 四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题&#xff…

FreeRTOS教程10 低功耗

目录 1、准备材料 2、学习目标 3、前提知识 3.1、HAL 库基础时钟 3.1.1、使用 SysTick 定时器 3.1.1.1、工作原理 3.1.1.2、中断处理 3.1.2、使用其他定时器 3.1.2.1、工作原理 3.1.2.2、中断处理 3.2、FreeRTOS 基础时钟 3.2.1、工作原理 3.2.2、中断处理 3.3、…

基于SpringBoot精品在线试题库系统

采用技术 基于SpringBoot精品在线试题库系统的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringBootMyBatis 工具:IDEA/Ecilpse、Navicat、Maven 页面展示效果 系统功能结构图 学生管理 教师管理 专业管理 试卷管理 …

美食杂志制作秘籍:引领潮流,引领味蕾

美食杂志是一种介绍美食文化、烹饪技巧和美食体验的杂志,通过精美的图片和生动的文字,向读者展示各种美食的魅力。那么,如何制作一本既美观又实用的美食杂志呢? 首先,你需要选择一款适合你的制作软件。比如FLBOOK在线制…

VUE+Vant实现H5组织架构选人选公司组件

提醒自己: 这是之前的逻辑,或许你重新写会有更好的方法,可以参考逻辑!!! 功能介绍 1.有面包屑点击切换 2.有公司、部门、人员 3.单选、多选实现 4.编辑/回显 5.使用随意切换层级和跳转到指定层级回显等功…

设计编程网站集:生活部分:饮食+农业,植物(暂记)

这里写目录标题 植物相关综合教程**大型植物:****高大乔木(Trees):** 具有坚硬的木质茎,通常高度超过6米。例如,橡树、松树、榉树等。松树梧桐 **灌木(Shrubs):** 比乔木…

html5cssjs代码 032 边框属性示例

html5&css&js代码 032 边框属性示例 一、代码二、解释 该HTML文件定义了一个网页页面&#xff0c;主要介绍了HTML5中CSS边框属性的用法。 一、代码 <!DOCTYPE html> <html lang"zh-cn"><head><title>编程笔记 html5&css&j…

mybatis-flex入门体验(一)

shigen坚持更新文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 个人IP&#xff1a;shigen 趁着下午的空闲时间&#xff0c;研究了一下mybatis-flex&#xff0c;看着对我还…

权限提升-Web权限提升篇划分获取资产服务后台系统数据库管理相互转移

知识点 1、权限提升转移-分类&高低&场景 2、Web权限提升及转移-后台&数据库 3、后台权限及转移-转移对象&后台分类 章节点&#xff1a; 1、Web权限提升及转移 2、系统权限提升及转移 3、宿主权限提升及转移 4、域控权限提升及转移 基础点 0、为什么我们要学…

excel所有知识点

1要加双引号 工作表&#xff08;.xlsx) 单击右键→插入&#xff0c;删除&#xff0c;移动、重命名、复制、设置标签颜色&#xff0c;选定全部工作表 工作表的移动&#xff1a;两个表打开→右键→移动&#xff08;如果右键是灰色的&#xff0c;可能是保护工作表了&#xff09…