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

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

示例代码:

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

package main

import (
    "fmt"
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
)

type User struct {
    ID   uint
    Name string
    Age  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 的记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值