返回
Go语言学习教程:xorm表高级操作及查询功能解析
见解分享
2023-11-01 17:43:39
Id值查询
Id值查询是指通过主键字段的值来查询表中的记录。例如:
id := 10
user, err := engine.Id(id).Get(&User{})
if err != nil {
// handle error
}
fmt.Println(user)
上述代码表示查询主键值为10的用户记录并将其赋值给变量user。
复合主键查询
如果表的主键是复合主键,可以使用core.PK
来传入主键的值:
type User struct {
ID int64 `xorm:"pk"`
Name string `xorm:"pk"`
Age int
CreatedAt time.Time `xorm:"created"`
UpdatedAt time.Time `xorm:"updated"`
}
id1 := 10
id2 := "John"
user, err := engine.Where(core.PK(id1, id2)).Get(&User{})
if err != nil {
// handle error
}
fmt.Println(user)
上述代码表示查询主键值分别为10和"John"的用户记录。
连表查询
连表查询是指查询多个表之间的关联关系。xorm框架提供了多种方法进行连表查询,例如:
- Join: 用于连接两个或多个表。
- LeftJoin: 用于连接两个表,并返回左表中的所有记录,即使右表中没有匹配的记录。
- RightJoin: 用于连接两个表,并返回右表中的所有记录,即使左表中没有匹配的记录。
- InnerJoin: 用于连接两个表,并仅返回两个表中都有匹配记录的记录。
以下是一个连表查询的示例:
type User struct {
ID int64 `xorm:"pk"`
Name string `xorm:"pk"`
Age int
CreatedAt time.Time `xorm:"created"`
UpdatedAt time.Time `xorm:"updated"`
}
type Order struct {
ID int64 `xorm:"pk"`
UserID int64 `xorm:"index"`
ProductID int64 `xorm:"index"`
Quantity int
CreatedAt time.Time `xorm:"created"`
UpdatedAt time.Time `xorm:"updated"`
}
engine.Join("LEFT", "orders", "orders.user_id = users.id").
Where("users.name = ?", "John").
Find(&users)
上述代码表示连接users
表和orders
表,并查询用户名为"John"的所有用户的订单记录。
条件查询
条件查询是指根据指定的条件来查询表中的记录。xorm框架提供了多种条件查询操作符,例如:
- Eq: 等于
- Ne: 不等于
- Gt: 大于
- Lt: 小于
- Ge: 大于等于
- Le: 小于等于
- In: 在指定值列表中
- NotIn: 不在指定值列表中
以下是一个条件查询的示例:
engine.Where("age > ?", 18).And("name = ?", "John").
Find(&users)
上述代码表示查询年龄大于18且用户名为"John"的所有用户记录。
分组查询
分组查询是指根据指定的字段对表中的记录进行分组,并对分组后的数据进行统计。xorm框架提供了Group
和Having
方法进行分组查询:
- Group: 指定分组字段。
- Having: 指定分组后数据的统计条件。
以下是一个分组查询的示例:
engine.Group("age").Having("COUNT(*) > 1").
Find(&users)
上述代码表示查询年龄相同且用户数量大于1的所有年龄段。
排序查询
排序查询是指根据指定的字段对表中的记录进行排序。xorm框架提供了OrderBy
方法进行排序查询:
- OrderBy: 指定排序字段和排序方式(
ASC
升序或DESC
降序)。
以下是一个排序查询的示例:
engine.OrderBy("age DESC").
Find(&users)
上述代码表示查询所有用户记录,并按年龄降序排列。