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

gorm入门——根据条件查询列表

在 GORM 中,你可以通过 Where 方法结合多个条件来查询符合条件的记录列表。Where 方法支持 ANDOR 条件,并且可以链式调用以构建复杂的查询。

示例代码:

假设你有一个 User 结构体,并希望根据多个条件查询符合条件的记录列表。

package mainimport ("fmt""gorm.io/driver/mysql""gorm.io/gorm"
)type User struct {ID   uintName stringAge  int
}func main() {dsn := "user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})if err != nil {panic(err)}var users []User// 示例1:AND 条件查询db.Where("name = ? AND age = ?", "John Doe", 30).Find(&users)fmt.Println("Users with name 'John Doe' and age 30:", users)// 示例2:OR 条件查询db.Where("name = ?", "John Doe").Or("age = ?", 25).Find(&users)fmt.Println("Users with name 'John Doe' or age 25:", users)// 示例3:使用 map 传递多个条件 (AND 条件)db.Where(map[string]interface{}{"name": "John Doe", "age": 30}).Find(&users)fmt.Println("Users with name 'John Doe' and age 30 (using map):", users)// 示例4:链式查询多个条件db.Where("name = ?", "John Doe").Where("age = ?", 30).Find(&users)fmt.Println("Users with name 'John Doe' and age 30 (using chained Where):", users)
}

解释:

1.AND 条件查询

db.Where("name = ? AND age = ?", "John Doe", 30).Find(&users)

使用 SQL 的 AND 语法,查询 name"John Doe"age30 的记录。

2. OR 条件查询:

db.Where("name = ?", "John Doe").Or("age = ?", 25).Find(&users)

使用 Or 方法添加 OR 条件,查询 name"John Doe"age25 的记录。

3.使用 map 传递多个条件

db.Where(map[string]interface{}{"name": "John Doe", "age": 30}).Find(&users)

通过 map 传递多个条件,这些条件默认是 AND 关系。

4.链式调用多个 Where 条件

db.Where("name = ?", "John Doe").Where("age = ?", 30).Find(&users)

通过链式调用 Where 方法,可以添加多个条件,每个 Where 方法都是一个 AND 条件。

复杂查询示例:

如果你有更复杂的查询需求,比如在一个条件组中使用 AND,另一个条件组中使用 OR,可以使用 Where 方法组合和嵌套条件:

db.Where("name = ? AND (age = ? OR age = ?)", "John Doe", 30, 25).Find(&users)

这个示例查询 name"John Doe" 并且 age3025 的记录。

http://www.lryc.cn/news/418300.html

相关文章:

  • 笔面试编程题总结
  • [other][知识]八大行星的英文各是什么?
  • 如何使用 AWS CLI 创建和运行 EMR 集群
  • HDFS写入数据的流程图
  • 【Material-UI】使用指南:快速入门与核心功能解析
  • 【Java 第十三篇章】MyBatis 持久化框架的介绍
  • AI新应用:概要设计与详细设计自动生成解决方案
  • 【物联网设备端开发】使用QEMU模拟ESP硬件运行ESP-IDF
  • #子传父父传子props和emits #封装的table #vue3
  • 尚硅谷谷粒商城项目笔记——四、使用docker安装redis【电脑CPU:AMD】
  • Java在无人驾驶方向的就业方向
  • 机器学习中的关键距离度量及其应用
  • Redis中缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题
  • 【C++】vector 的模拟实现
  • 【C++】模版详解
  • 应用商店故障(UOS系统)
  • 8月8号前端日报:web在线进行eps32固件升级
  • win7安装python3.10
  • 【Liunx】线程与进程的经典面试题总结
  • Python中的 `break` 语句:掌握循环控制的艺术
  • ES2023(ES14)新特性有什么?
  • Linux 中的特殊文件权限:SUID、GUID 和 Sticky
  • 2024 某公司python 面试真题
  • jwt伪造身份组组组合拳艰难通关
  • leetcode日记(64)最小覆盖子串
  • C语言——编译与链接
  • 你一定想看的LVS详细介绍及常见模式(NAT,DR,防火墙标记)实验详解
  • 嵌入式初学-C语言-十七
  • leetcode数论(2280. 表示一个折线图的最少线段数)-几何
  • 如何利用 LNMP 搭建 WordPress 站点