GoooQo v0.2.3
首页仓库演示
简体中文
简体中文
  • GoooQo介绍
  • 快速上手
  • 接口使用
    • 数据库连接
    • 事务
    • 增删查改接口
  • 实体映射
    • 实体对象
    • 关联实体
  • 查询条件构建
    • 查询对象定义
      • 谓词后缀字段
      • 逻辑后缀字段
      • 子查询字段
      • ER关系字段
      • 自定义字段
    • 分页排序对象
  • 聚合查询
    • 视图对象
    • 聚合查询对象
    • 自然连接
    • 外连接
  • 高级用法
    • 数据库方言
    • 锁
  • 相关资源
    • 文章
      • 从ORM到OQM:一种基于对象的SQL语句构造方案
      • 在GoooQo中如何表示`select * from user where id = ? or name = ? and age = ?`
由 GitBook 提供支持
在本页
  • Or后缀
  • NameStartOr *[]string
  • UserOr *UserQuery
  • UsersOr *[]UserQuery
  • And后缀
  • UserAnd *UserQuery
  • 相关文章

这有帮助吗?

在GitHub上编辑
  1. 查询条件构建
  2. 查询对象定义

逻辑后缀字段

默认情况下,查询对象各个字段对应的查询条件之间是通过AND连接起来的。

Or后缀

如果需要使用逻辑运算符OR连接查询条件,则需要在查询对象中定义一个后缀为Or的结构体或数组。

GoooQo支持以下三种定义方式:

type UserQuery struct {
	PageQuerygo
	//...
	NameStartOr *[]string
	UserOr      *UserQuery
	UsersOr     *[]UserQuery
}

NameStartOr *[]string

userQuery := UserQuery{NameStartOr: &[]string{"Bob", "John", "Tim"}}
users, err := userDataAccess.Query(ctx, userQuery)
// SQL="SELECT id, name, score, memo, deleted FROM t_user 
// WHERE (name LIKE ? OR name LIKE ? OR name LIKE ?)" args="[Bob% John% Tim%]"

UserOr *UserQuery

userQuery := UserQuery{UserOr: &UserQuery{IdIn: &[]int64{1, 4, 12}, Deleted: P(true)}}
users, err := userDataAccess.Query(ctx, userQuery)
// SQL="SELECT id, name, score, memo, deleted FROM t_user 
// WHERE (id IN (?, ?, ?) OR deleted = ?)" args="[1 4 12 true]"

UsersOr *[]UserQuery

userQuery := UserQuery{UsersOr: &[]UserQuery{
	{IdIn: &[]int64{1, 4, 12}, Deleted: P(true)},
	{IdGt: P(int64(10)), Deleted: P(false)},
}}
users, err := userDataAccess.Query(ctx, userQuery)
// SQL="SELECT id, name, score, memo, deleted FROM t_user
// WHERE (id IN (?, ?, ?) AND deleted = ? OR id > ? AND deleted = ?)"
// args="[1 4 12 true 10 false]"

And后缀

当字段的名称以And结尾时,连接多个查询条件的逻辑运算符为AND。

type UserQuery struct {
	PageQuerygo
	//...
	UserOr      *UserQuery
	UserAnd     *UserQuery
}

UserAnd *UserQuery

userQuery := UserQuery{ScoreLt: P(80), UserOr: &UserQuery{Deleted: P(true),
    UserAnd: &UserQuery{IdIn: &[]int64{1, 4, 12}, Deleted: P(false)}}}
users, err := userDataAccess.Query(ctx, userQuery)
// SQL="SELECT id, name, score, memo, deleted FROM t_user
// WHERE score < ? AND (deleted = ? OR id IN (?, ?, ?) AND deleted = ?)"
// args="[80 true 1 4 12 false]"

相关文章

上一页谓词后缀字段下一页子查询字段

最后更新于8个月前

这有帮助吗?

在GoooQo中怎么表达select * from user where id = ? or (name = ? and age = ?)