网站 前端 后端做教育的网站有哪些
在 GORM 中,你可以通过 Where 方法结合多个条件来查询符合条件的记录列表。Where 方法支持 AND 和 OR 条件,并且可以链式调用以构建复杂的查询。
示例代码:
假设你有一个 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" 且 age 为 30 的记录。
2. OR 条件查询:
db.Where("name = ?", "John Doe").Or("age = ?", 25).Find(&users)
使用 Or 方法添加 OR 条件,查询 name 为 "John Doe" 或 age 为 25 的记录。
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" 并且 age 为 30 或 25 的记录。
