gorm 多条件查询
时间: 2024-02-10 22:06:18 浏览: 396
gorm中的多条件查询可以使用`Where`方法来实现。你可以在`Where`方法中使用多个条件进行查询。
以下是使用gorm进行多条件查询的示例代码:
```go
package main
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
// 模型结构
type Student struct {
Id int
Name string
Age int
}
func main() {
// 使用dsn连接到数据库
dsn := "root:password@tcp(127.0.0.1:3306)/database_name?charset=utf8mb4&parseTime=True&loc=Local"
conn, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
fmt.Println(err)
}
// 多条件查询
students := []Student{}
conn.Where("age = ? AND name LIKE ?", 22, "%John%").Find(&students)
fmt.Println(students)
}
```
在以上示例中,我们使用了`Where`方法来指定了两个条件:年龄等于22并且名字包含"John"。你可以根据自己的需求修改条件。
相关问题
gorm join连接查询
在 GORM 中,可以通过 `Join` 方法来进行连接查询。`Join` 方法接收两个参数:连接类型和连接的表名或结构体名。
假设我们有两个结构体 `User` 和 `Profile`,它们之间有一对一的关系,即一个用户对应一个个人资料。那么我们可以使用以下代码进行连接查询:
```go
type User struct {
ID uint
Name string
Profile Profile
ProfileID uint
}
type Profile struct {
ID uint
Age int
Gender string
Address string
}
db.Table("users").
Joins("left join profiles on users.profile_id = profiles.id").
Select("users.id, users.name, profiles.age, profiles.gender, profiles.address").
Scan(&result)
```
在上面的代码中,我们使用 `Joins` 方法来进行左连接查询,连接的表是 `profiles`,连接条件是 `users.profile_id = profiles.id`。使用 `Select` 方法指定需要查询的字段,并使用 `Scan` 方法将查询结果扫描到 `result` 变量中。
注意,在进行连接查询时,需要使用 `Scan` 方法来扫描查询结果,而不能使用 GORM 的普通查询方法。
GORM join关联查询
以下是使用GORM进行join关联查询的示例代码:
```go
type Service struct {
ServiceID int
ServiceName string
SystemID int
System System
}
type System struct {
SystemID int
SystemName string
}
var services []Service
db.Table("go_service_info").Select("go_service_info.service_id, go_service_info.service_name, go_system_info.system_id, go_system_info.system_name").Joins("left join go_system_info on go_service_info.system_id = go_system_info.system_id").Scan(&services)
```
在这个示例中,我们定义了两个结构体:Service和System。Service结构体包含了ServiceID、ServiceName、SystemID和System四个字段,其中System字段是一个System结构体类型。System结构体包含了SystemID和SystemName两个字段。
我们使用db.Table()方法指定要查询的表名,然后使用Select()方法指定要查询的字段。在这个例子中,我们查询了go_service_info表中的service_id和service_name字段,以及go_system_info表中的system_id和system_name字段。
接下来,我们使用Joins()方法指定要进行关联查询的表和关联条件。在这个例子中,我们使用了left join关键字,将go_service_info表和go_system_info表进行了关联,关联条件是go_service_info表的system_id字段等于go_system_info表的system_id字段。
最后,我们使用Scan()方法将查询结果保存到services变量中。
阅读全文