go语言Gin框架的学习路线(十)

目录

GORM的CRUD教程

查询

普通查询

定义 User 结构体

查询所有用户

查询第一个用户

总结

条件查询

内联条件

额外查询选项

高级查询

链式操作

Scopes

多个立即执行方法


GORM的CRUD教程

CRUD 是 "Create, Read, Update, Delete"(创建、查询、更新、删除)的缩写,代表了数据库操作的基本功能。在 GORM 的上下文中,CRUD 指的是使用 GORM 库来执行这些基本的数据库操作。

查询

以下是 GORM 进行不同查询操作的一些示例代码,包括普通查询、条件查询、高级查询等

普通查询

// 假设我们有一个User结构体
type User struct {gorm.ModelName stringAge  int
}// 查询所有用户
var users []User
db.Find(&users)// 查询第一个用户
var firstUser User
db.First(&firstUser)

定义 User 结构体

首先定义了一个 User 结构体,它将映射到数据库中的一个表。gorm.Model 是 GORM 内置的,它包含了一些基本的字段,如 ID(主键)、CreatedAt(记录创建时间)、UpdatedAt(记录更新时间)和 DeletedAt(软删除时间)。

查询所有用户

使用 db.Find(&users) 方法来查询数据库中所有的 User 记录。

  • db 是一个 *gorm.DB 类型的变量,它代表了数据库的连接。
  • Find 方法用于检索数据库中的记录。
  • &users 是一个指向 User 类型切片的指针。GORM 会将查询到的所有用户记录填充到这个切片中。

查询第一个用户

使用 db.First(&firstUser) 方法来查询数据库中的第一个 User 记录。

  • First 方法用于检索数据库中的第一个记录。
  • &firstUser 是一个指向 User 结构体的指针。GORM 会将查询到的第一个用户记录填充到这个结构体中。

总结

这段代码演示了如何使用 GORM 来执行基本的数据库查询操作。Find 方法用于获取所有记录,而 First 方法用于获取第一个记录。在实际开发中,还需要考虑错误处理和可能的空值检查。

条件查询

// 使用Where查询
var users []User
db.Where("age > ?", 18).Find(&users) // 年龄大于18的用户// 使用Not条件
db.Not("age = ?", 18).Find(&users) // 年龄不等于18的用户// 使用Or条件
db.Where("age > ?", 18).Or("name = ?", "Alice").Find(&users) // 年龄大于18或名字为Alice的用户

这段代码是使用Go语言和GORM库进行数据库查询的示例。GORM是一个用于Golang的开源对象关系映射(ORM)库,它允许开发者以更简洁的方式操作数据库。

  1. db.Where("age > ?", 18).Find(&users):这行代码表示从数据库中查找年龄大于18的用户,并将结果存储在users切片中。?是一个占位符,它将被后面的参数(这里是18)替换。

  2. db.Not("age = ?", 18).Find(&users)这行代码表示从数据库中查找年龄不等于18的用户,并将结果存储在users切片中。Not方法用于添加一个否定条件,即排除满足指定条件的记录。

  3. db.Where("age > ?", 18).Or("name = ?", "Alice").Find(&users):这行代码表示从数据库中查找年龄大于18或者名字为"Alice"的用户,并将结果存储在users切片中。Or方法用于添加一个或条件,即满足任一条件的记录都会被选中。

注意:在实际使用中,你需要确保已经正确配置了数据库连接,并且User结构体与数据库中的表结构相匹配。

内联条件

// 内联条件
db.Where("age > ? AND name = ?", 18, "Alice").Find(&users)

这段代码是使用Go语言和GORM库进行数据库查询的示例。GORM是一个用于Golang的开源对象关系映射(ORM)库,它允许开发者以更简洁的方式操作数据库。

db.Where("age > ? AND name = ?", 18, "Alice").Find(&users):这行代码表示从数据库中查找年龄大于18且名字为"Alice"的用户,并将结果存储在users切片中。?是一个占位符,它将被后面的参数(这里是18和"Alice")替换。

在这个例子中,Where方法用于添加一个条件,即年龄大于18且名字等于"Alice"。AND关键字用于连接两个条件,确保同时满足这两个条件的记录才会被选中。Find方法用于执行查询并将结果填充到指定的变量(这里是users切片)。

 

额外查询选项

// FirstOrInit
var user User
db.FirstOrInit(&user, User{Name: "Alice"}) // 如果不存在则初始化// Attrs
db.First(&user, "id = ?", 1)
db.Attrs(User{Name: "Bob"}).First(&user) // 将参数赋值给user// FirstOrCreate
db.FirstOrCreate(&user, User{Name: "Alice"}) // 如果不存在则创建

这段代码是使用Go语言和GORM库进行数据库查询的示例。GORM是一个用于Golang的开源对象关系映射(ORM)库,它允许开发者以更简洁的方式操作数据库。

  1. db.FirstOrInit(&user, User{Name: "Alice"})这行代码表示从数据库中查找第一个名字为"Alice"的用户,并将结果存储在user变量中。如果不存在这样的用户,则将user初始化为一个新的User实例,其Name字段设置为"Alice"。

  2. db.Attrs(User{Name: "Bob"}).First(&user)这行代码表示从数据库中查找第一个满足条件的记录,并将其赋值给user变量。条件是通过Attrs方法指定的,即Name字段等于"Bob"。

  3. db.FirstOrCreate(&user, User{Name: "Alice"})这行代码表示从数据库中查找第一个名字为"Alice"的用户,并将结果存储在user变量中。如果不存在这样的用户,则创建一个新的用户,其Name字段设置为"Alice",并将新创建的用户赋值给user变量。

 

高级查询

// 子查询
var users []User
db.Where("age = (?)", db.Table("users").Select("MAX(age)")).Find(&users)// Select
db.Select("name, age").Find(&users) // 只选择name和age字段// Order
db.Order("age desc").Find(&users) // 按年龄降序// Limit
db.Limit(10).Find(&users) // 限制结果为10条// Offset
db.Offset(20).Find(&users) // 从第21条记录开始// Count
var count int64
db.Model(&User{}).Count(&count)// Group & Having
db.Group("age").Having("COUNT(*) > ?", 1).Find(&users)// Joins
db.Table("users as u join profiles as p on u.id = p.user_id").Select("u.*, p.data").Scan(&users)// Pluck
var ages []int
db.Pluck("age", &ages)// Scan
var result []map[string]interface{}
db.Table("users").Select("name, age").Scan(&result)

这段代码是使用Go语言和GORM库进行数据库查询的示例。GORM是一个用于Golang的开源对象关系映射(ORM)库,它允许开发者以更简洁的方式操作数据库。

  1. db.Where("age = (?)", db.Table("users").Select("MAX(age)")).Find(&users)这行代码表示从数据库中查找年龄等于最大年龄的用户,并将结果存储在users切片中。子查询通过db.Table("users").Select("MAX(age)")实现,返回最大的年龄值。

  2. db.Select("name, age").Find(&users)这行代码表示从数据库中选择nameage字段,并将结果存储在users切片中。

  3. db.Order("age desc").Find(&users):这行代码表示按照年龄降序排列用户,并将结果存储在users切片中。

  4. db.Limit(10).Find(&users):这行代码表示限制查询结果为最多10条记录,并将结果存储在users切片中。

  5. db.Offset(20).Find(&users):这行代码表示从第21条记录开始查询,并将结果存储在users切片中。

  6. var count int64; db.Model(&User{}).Count(&count):这行代码表示计算User表中的记录数,并将结果存储在count变量中。

  7. db.Group("age").Having("COUNT(*) > ?", 1).Find(&users):这行代码表示按年龄分组,并筛选出年龄组中有超过1个用户的组,然后将这些组中的用户信息存储在users切片中。

  8. db.Table("users as u join profiles as p on u.id = p.user_id").Select("u.*, p.data").Scan(&users)这行代码表示执行一个连接查询,users表和profiles表连接起来,选择所有users表的字段以及profiles表的data字段,并将结果扫描到users切片中。

  9. var ages []int; db.Pluck("age", &ages):这行代码表示仅提取age字段的值,并将结果存储在ages切片中。

  10. var result []map[string]interface{}; db.Table("users").Select("name, age").Scan(&result)这行代码表示从users表中选择nameage字段,并将结果扫描到一个包含字符串键和接口值的映射切片中。

 

链式操作

db.Where("age > ?", 18).Order("age desc").Limit(10).Find(&users)

这段代码是使用Go语言和GORM库进行数据库查询的示例。GORM是一个用于Golang的开源对象关系映射(ORM)库,它允许开发者以更简洁的方式操作数据库。

db.Where("age > ?", 18).Order("age desc").Limit(10).Find(&users):这行代码表示从数据库中查找年龄大于18的用户,并按照年龄降序排列,最后取前10条记录,并将结果存储在users切片中。

具体解释如下:

  • db.Where("age > ?", 18):这部分代码表示添加一个条件,即年龄大于18。?是一个占位符,它将被后面的参数(这里是18)替换。
  • Order("age desc"):这部分代码表示按照年龄字段降序排列结果。
  • Limit(10):这部分代码表示限制查询结果最多为10条记录。
  • Find(&users):这部分代码表示执行查询并将结果填充到指定的变量(这里是users切片)。

 

Scopes

// 定义一个Scope
func AgeAbove(age int) func(db *gorm.DB) *gorm.DB {return db.Where("age > ?", age)
}// 使用Scope
db.Scopes(AgeAbove(18)).Find(&users)

这段代码是使用Go语言和GORM库进行数据库查询的示例。GORM是一个用于Golang的开源对象关系映射(ORM)库,它允许开发者以更简洁的方式操作数据库。

首先定义了一个名为AgeAbove的函数,该函数接受一个整数参数age,并返回一个闭包函数。这个闭包函数接受一个*gorm.DB类型的参数,表示一个GORM数据库连接实例,并返回一个同样类型的结果。在这个闭包函数中,使用了Where方法来添加一个条件,即年龄大于传入的age参数。

接下来,在调用db.Scopes(AgeAbove(18)).Find(&users)时,使用了Scopes方法来应用AgeAbove函数定义的条件。这里的AgeAbove(18)表示创建一个只查询年龄大于18岁的用户的条件。然后,通过链式调用Find方法来执行查询并将结果填充到users变量中。

总结一下,这段代码的作用是查询年龄大于18岁的用户,并将结果存储在users变量中。

 

多个立即执行方法

db.Where("age > ?", 18).Find(&users).Count(&count)

这段代码是使用Go语言和GORM库进行数据库查询的示例。GORM是一个用于Golang的开源对象关系映射(ORM)库,它允许开发者以更简洁的方式操作数据库。

db.Where("age > ?", 18).Find(&users):这部分代码表示添加一个条件,即年龄大于18岁,并执行查询将结果填充到users变量中。&users表示将查询结果存储在users切片中。

Count(&count):这部分代码表示计算满足条件的记录数,并将结果存储在count变量中。&count表示将计数结果存储在count变量中。

总结一下,这段代码的作用是查询年龄大于18岁的用户,并将结果存储在users切片中,同时计算满足条件的记录数,并将结果存储在count变量中。

 

请注意,这些示例代码假设你已经配置了 GORM 并连接到了数据库。你需要根据实际的数据库类型和配置来设置连接参数。此外,错误处理在实际应用中非常重要,应该根据需要进行适当的错误处理。

 期末放假自学Gin框架,希望我们可以一起学习!

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

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

相关文章

AIoTedge边缘物联网平台,开启智能物联新架构

边缘物联网平台是一种将计算能力、数据处理和应用服务部署在网络边缘的解决方案,旨在提高响应速度、降低带宽需求和增强数据安全。根据搜索结果,边缘物联网平台应具备以下功能: 云边协同: 云边一体架构,通过云端管理边…

【BUG】已解决:Downgrade the protobuf package to 3.20.x or lower.

Downgrade the protobuf package to 3.20.x or lower. 目录 Downgrade the protobuf package to 3.20.x or lower. 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身…

【昇腾AI创新大赛集训营南京站学习笔记】-Ascend算子开发课程

昇腾AI创新大赛训练营 14:00-14:30 基础知识-理论课 一、CANN 、达芬奇架构和算子 1.AI Core逻辑架构 达芬奇架构包含三部分: 1)计算类:矩阵计算单元(两个矩阵扔进去相乘)、向量计算单元、标量计算单元 2)控…

基于单片机控制的变压器油压油温故障检测

摘 要 在电力系统的运行中,通过对其核心设备变压器的故障进行检测,以此能够及时、准确的发现变压器的故障,基于单片机控制的变压器油压油温的故障检测的方法,利用压力传感器、温度传感器对变压器的油压、油温进行采集并送入单片机…

vCenter 错误提示 “目标主机上的vmotion接口未配置”

vCenter 错误提示 “目标主机上的vmotion接口未配置” VMware 使用 vCenter 迁移 虚拟机报错 “目标主机上的 vMotion 接口未配置”,配置启用 vMotion 的步骤如下: (END)

leetcode3098. 求出所有子序列的能量和

官解 class Solution(object):# 定义常量mod int(1e9 7) # 模数,用于防止结果溢出inf float(inf) # 无穷大,用于初始化时的特殊值def sumOfPowers(self, nums, k):n len(nums) # 数组长度res 0 # 用于存储最终结果# 三维动态规划表,…

Nacos-2.4.0最新版本docker镜像,本人亲自制作,部署十分方便,兼容postgresql最新版本17和16,奉献给大家了

基于Postgresql数据库存储的nacos最新版本2.4.0,采用docker镜像安装方式 因业务需要,为了让nacos支持postgresql,特意花了两天时间修改了源码,然后制作了docker镜像,如果你也在找支持postgresql的nacos最新版本,恭喜你,你来的正好~ nacos-2.4.0 postgresql的数据库脚本…

Apache SeaTunnel快速入门及原理和实践(一)

一、概述 主要从以下6个方面进行: 对数据集成做一个简单的概括对 SeaTunnel 做简单的介绍介绍 SeaTunnel 当前的原理和架构演进对当前市面上一些比较常见的数据集成工具进行对比,来解读一下现在市面上已经有了那么多数据集成工具,为什么我们…

Django Web框架——01

目录 文章目录 目录 Django框架的介绍起源&现状Django的安装 创建Django项目创建项目的指令Django项目的目录结构settings.py 文件介绍 URL 介绍URL定义Django如何处理一个URL对应的请求视图函数(view) Django 路由配置path() 函数path转换器 re_path()函数 HTTP协议的请求…

CoAP——Libcoap安装和使用(Ubuntu22.04)

1、简介 CoAP(Constrained Application Protocol)是一种专为受限设备和网络设计的应用层协议。它类似于HTTP,但具有更轻量级的特性,适合用于物联网(IoT)环境中的低功耗和低带宽设备。Libcoap是一个轻量级的…

云计算实训12——配置web服务器、配置客户端服务器、配置DNS服务、实现DNS域名解析

一、配置web服务器 准备操作 首先在正式配置之前需要做以下操作 关闭防火墙 systemctl stop firewalld 永久关闭防火墙 systemctl disable firewalld 关闭selinux setenforce 0 永久关闭selinux vim /etc/selinux/config selinuxpermissive 还需要保证能够正常ping通www.bai…

【SpingCloud】客户端与服务端负载均衡机制,微服务负载均衡NacosLoadBalancer, 拓展:OSI七层网络模型

客户端与服务端负载均衡机制 可能有第一次听说集群和负载均衡,所以呢,我们先来做一个介绍,然后再聊服务端与客户端的负载均衡区别。 集群与负载均衡 负载均衡是基于集群的,如果没有集群,则没有负载均衡这一个说法。 …

有哪些好用的 AI 学术研究工具和科研工具?

AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量https://aitools.jurilu.com/ AI 应用其实分两个层面,第一是模型,第二是应用。现在很多模型厂家都是既做 toC 的对话应用,也做 t…

GD 32 流水灯

前言: 通过后面的学习掌握了一些逻辑架构的知识,通过复习的方式将学到的裸机任务架构的知识运用起来,同时巩固前面学到的知识,GPIO的配置等。 开发板上LED引脚使用示意图 注:此次LED灯的点亮凡是是高电平点亮&#xff…

好用的电脑屏幕监控软件推荐,什么软件能够监控电脑?

在当今信息化时代,电脑屏幕监控软件成为了企业管理、家长监管以及教育培训等领域的必备工具。通过实时监控电脑屏幕,这类软件可以有效提高工作效率,防止信息泄露,保障网络安全。本文将详细盘点几款主流的电脑屏幕监控软件&#xf…

Linux shell编程学习笔记66:ping命令 超详细的选项说明

0 前言 网络信息是电脑网络信息安全检查中的一块重要内容,Linux和基于Linux的操作系统,提供了很多的网络命令,今天我们研究最常用的ping命令。 1 ping命令 的功能、格式和选项说明 1.1 ping命令 的功能 简单来说, ping 命令 会…

全网最适合入门的面向对象编程教程:23 类和对象的 Python 实现-抛出异常

全网最适合入门的面向对象编程教程:23 类和对象的 Python 实现-抛出异常 摘要: 本文主要介绍了在使用Python面向对象编程时,抛出异常的应用场景、raise语句的使用方法和raise语句语法格式,并举出相应示例辅助讲解。 原文链接&am…

【PyTorch】图像二分类项目

【PyTorch】图像二分类项目 【PyTorch】图像二分类项目-部署 【PyTorch】图像多分类项目 【PyTorch】图像多分类项目部署 图像分类是计算机视觉中的一项重要任务。在此任务中,我们假设每张图像只包含一个主对象。在这里,我们的目标是对主要对象进行分类。…

检索增强生成Retrieval-Augmented Generation(RAG)简介

检索增强生成Retrieval-Augmented Generation(RAG)简介 引言 在自然语言处理领域,生成式任务(如文本生成、机器翻译等)一直备受关注。传统的生成模型如GPT、BERT等虽然取得了显著成果,但在处理长文本、知…

C#数组复习

一、一维数组 using System.Collections; using System.Collections.Generic; using UnityEngine;public class ShuZu : MonoBehaviour {#region 知识点一 基本概念//数组是存储一组相同类型数据的集合//数组分为 一维、二维、交错数组//一般情况 一维数组 就简称为数组#en…