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

深入学习 GORM:记录插入与数据检索

引言

在使用 GORM 进行数据库操作时,掌握如何高效地插入记录和检索数据是非常重要的。本文将详细介绍通过 Create 方法插入记录、批量插入、以及各种数据检索方法,并结合实际示例进行讲解。

一、通过 Create 方法插入记录

GORM 提供了简单易用的 Create 方法来插入单条记录。以下是一个基本示例:

type User struct {ID   uintName string
}var user = User{Name: "jinzhu"}
db.Create(&user)

执行上述代码后,user.ID 将被自动设置为新插入记录的主键值。

二、批量插入和通过 map 插入记录

批量插入

当你需要插入大量数据时,可以使用 CreateInBatches 方法来指定批量插入的批次大小,以提高性能。

示例 1:批量插入用户数据
var users = []User{{Name: "jinzhu1"}, {Name: "jinzhu2"}, {Name: "jinzhu3"}}
db.Create(&users)for _, user := range users {fmt.Println(user.ID) // 输出插入后的ID
}
示例 2:大批量插入用户数据
var users = []User{{Name: "jinzhu_1"},...,{Name: "jinzhu_10000"},
}// batch size 100
db.CreateInBatches(users, 100)

根据 Map 创建记录

除了直接使用结构体插入数据外,还可以通过 map[string]interface{} 来创建记录。

示例 1:单个记录
db.Model(&User{}).Create(map[string]interface{}{"Name": "jinzhu", "Age": 18,
})
示例 2:批量记录
db.Model(&User{}).Create([]map[string]interface{}{{"Name": "jinzhu_1", "Age": 18},{"Name": "jinzhu_2", "Age": 20},
})

三、通过 Take、First、Last 获取数据

GORM 提供了多种方法来检索数据,包括 TakeFirstLast 等。

自动迁移表结构

在开始查询之前,确保已经创建了相应的表结构。

db.AutoMigrate(&User{})

使用 First 查询数据

First 方法用于获取第一条记录,默认按照主键升序排序。

var user User
result := db.First(&user, 1) // 根据主键查询
fmt.Println("User ID:", user.ID)if errors.Is(result.Error, gorm.ErrRecordNotFound) {fmt.Println("record not found")
}

使用 Take 获取一条记录

Take 方法用于获取任意一条记录,没有指定排序字段。

result := db.Take(&user, 10)
if errors.Is(result.Error, gorm.ErrRecordNotFound) {fmt.Println("record not found")
}

使用 Last 获取最后一条记录

Last 方法用于获取最后一条记录,默认按照主键降序排序。

db.Last(&user)
// SELECT * FROM users ORDER BY id DESC LIMIT 1;

根据主键检索

可以通过 Find 方法根据主键检索多条记录。

db.Find(&user, []int{1, 2, 3})
// SELECT * FROM users WHERE id IN (1,2,3);

检索全部对象

Find 方法也可以用于检索所有记录。

var users []User
result := db.Find(&users)
fmt.Println("Total records:", result.RowsAffected)for _, user := range users {fmt.Println("User ID:", user.ID)
}

总结

通过本文的学习,你应该已经掌握了如何使用 GORM 进行记录插入和数据检索的基本方法。无论是单条记录还是批量记录的插入,还是通过不同的方法进行数据检索,GORM 都提供了简洁而强大的支持。希望这些内容能帮助你在实际开发中更加熟练地运用 GORM。

http://www.lqws.cn/news/572131.html

相关文章:

  • MySQL技巧
  • 【ad-hoc】# P12414 「YLLOI-R1-T3」一路向北|普及+
  • Requests源码分析:面试考察角度梳理
  • MySQL 架构
  • 理解 Confluent Schema Registry:Kafka 生态中的结构化数据守护者
  • 第10.4篇 使用预训练的目标检测网络
  • 学习使用Visual Studio分析.net内存转储文件的基本用法
  • C# 委托(调用带引用参数的委托)
  • 计算机组成原理与体系结构-实验四 微程序控制器 (Proteus 8.15)
  • 【硬核数学】3. AI如何应对不确定性?概率论为模型注入“灵魂”《从零构建机器学习、深度学习到LLM的数学认知》
  • 【HuggingFace】模型下载至本地访问
  • SpringMVC实战:从配置到JSON处理全解析
  • 开源免费计划工具:帮你高效规划每一天
  • UE5 Grid3D 学习笔记
  • 什么是IPFS(InterPlanetary File System,星际文件系统)
  • c# 在sql server 数据库中批插入数据
  • C++ 格式化输入输出
  • 「Java案例」输出24个希腊字母
  • 计算机组成原理与体系结构-实验一 进位加法器(Proteus 8.15)
  • Linux下的调试器-gdb(16)
  • 信息安全与网络安全---引言
  • 矩阵的定义和运算 线性代数
  • 设计模式 | 组合模式
  • VMware设置虚拟机为固定IP
  • Transformer结构与代码实现详解
  • redisson看门狗实现原理
  • Linux基本命令篇 —— head命令
  • 【锁相环系列5】再谈数字锁相环
  • python sklearn 机器学习(1)
  • 多模态大语言模型arxiv论文略读(143)