query

package module
v0.0.0-...-17e586f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 6, 2026 License: MIT Imports: 4 Imported by: 1

README

🚀 Query - Go语言查询构建器

一个简洁、高效的Go语言查询构建器,支持多种数据库操作,提供流畅的链式调用API。

✨ 功能特性

  • 多操作支持 - SELECT、INSERT、UPDATE、DELETE多种SQL操作
  • 🔗 链式调用 - 流畅的API设计,支持链式调用
  • 🔍 复杂条件 - 支持AND、OR、NOT等复杂WHERE条件
  • 📊 排序分页 - 支持ORDER BY排序和LIMIT/OFFSET分页
  • 🎯 类型安全 - 支持多种数据类型的参数绑定
  • 🪶 轻量级 - 无外部依赖,轻量级设计
  • 🌐 AIP标准 - 支持Google AIP过滤和排序标准
  • 🔌 适配器架构 - 可扩展的适配器设计,支持不同数据库

📦 安装

go get github.com/epkgs/query

🔌 适配器

该库设计了适配器机制,可以将查询转换为不同数据库的SQL语句或查询条件。

🎯 AIP适配器

支持Google API Improvement Proposals (AIP)的过滤和排序语法转换。

import (
    adapter "github.com/epkgs/query/adapter/aip"
    "github.com/epkgs/query/clause"
    filtering "go.einride.tech/aip/filtering"
    ordering "go.einride.tech/aip/ordering"
)

// 解析AIP过滤条件
filter, err := filtering.ParseFilter(filteringRequest, declarations)
// 转换为clause.Where
whereClause, err := adapter.FromFilter(filter)

// 解析AIP排序条件
orderBy, err := ordering.ParseOrderBy(orderingRequest)
// 转换为clause.OrderBys
orderBys := adapter.FromOrderBy(orderBy)
🐬 GORM适配器

支持GORM ORM框架的查询转换。

import (
    adapter "github.com/epkgs/query/adapter/gorm"
    "gorm.io/gorm"
)

q := query.Table("users").Where("name", "John").Select("id", "name")
db, err := gorm.Open(...) // 初始化GORM
db.Scopes(
    adapter.Where(q.WhereExpr()),
    adapter.OrderBy(q.OrderByExpr()),
    adapter.Pagination(q.PaginationExpr()),
).Find(&users)
🔄 Ent适配器

支持Ent ORM框架的查询转换。

import (
	"entgo.io/ent/dialect/sql"
    adapter "github.com/epkgs/query/adapter/ent"
)

q := query.Table("users").Where("name", "John").Select("id", "name")
// 使用 Selector 构建查询
selector := sql.Selector{}
selector.From(sql.Table("users"))
// 转换过滤条件
whereScope := adapter.Where(q.WhereExpr())
orderScope := adapter.OrderBy(q.OrderByExpr())
paginationScope := adapter.Pagination(q.PaginationExpr())
// 应用所有查询条件
whereScope(&selector)
orderScope(&selector)
paginationScope(&selector)
// 执行操作
query, args := selector.Query()

🚀 快速开始

🔍 SELECT查询
import "github.com/epkgs/query"

// 基本查询
q := query.Table("users").Select("id", "name", "age")

// 带WHERE条件
q := query.Table("users").Where("age", ">", 18).Select("id", "name", "age")

// 带排序
q := query.Table("users").OrderBy("age", "desc").OrderBy("name").Select("id", "name", "age")

// 带分页
q := query.Table("users").Limit(10).Offset(20).Select("id", "name", "age")

// 链式调用
q := query.Table("users").Where("age", ">", 18).OrWhere("name", "admin").OrderBy("age", "desc").Limit(10).Select("id", "name", "age")
➕ INSERT操作
// 单行插入(使用字段值对)
q := query.Table("users").Insert("name", "John", "age", 30)

// 单行插入(使用map)
q := query.Table("users").Insert(map[string]any{"name": "John", "age": 30})

// 多行插入
q := query.Table("users").Insert(
    map[string]any{"name": "John", "age": 30},
    map[string]any{"name": "Jane", "age": 25},
)
✏️ UPDATE操作
// 更新单个字段
q := query.Table("users").Where("id", 1).Update("name", "John")

// 更新多个字段(使用map)
q := query.Table("users").Where("id", 1).Update(map[string]any{"name": "John", "age": 30})
🗑️ DELETE操作
// 删除所有记录
q := query.Table("users").Delete()

// 带条件删除
q := query.Table("users").Where("id", 1).Delete()

🔍 WHERE条件

📋 基本条件
// 等于
q.Where("name", "=", "John")
q.Where("name", "John") // 简写形式

// 不等于
q.Where("name", "<>", "John")
q.Not("name", "John") // 简写形式

// 大于
q.Where("age", ">", 18)

// 小于
q.Where("age", "<", 30)

// 大于等于
q.Where("age", ">=", 18)

// 小于等于
q.Where("age", "<=", 30)

// LIKE
q.Where("name", "LIKE", "J%")

// IN
q.Where("id", []any{1, 2, 3, 4, 5})

// NULL
q.Where("email", nil)
🔗 逻辑组合
// AND条件(默认)
q.Where("age", ">", 18).Where("age", "<", 30)

// OR条件
q.Where("age", ">", 18).OrWhere("name", "admin")

// NOT条件
q.Where("age", ">", 18).Not("status", "banned")

ORDER BY排序

字符串形式
// 单个字段升序
q.OrderBy("name")

// 单个字段降序
q.OrderBy("age", "desc")

// 多个字段排序
q.OrderBy("age", "desc").OrderBy("name")

// 逗号分隔的多个字段
q.OrderBy("age desc, name asc")
结构化形式
import "github.com/epkgs/query/clause"

// 单个clause.OrderBy
q.OrderBy(clause.OrderBy{Column: "name", Desc: false})

// 多个clause.OrderBy参数
q.OrderBy(
    clause.OrderBy{Column: "age", Desc: true},
    clause.OrderBy{Column: "name", Desc: false},
)

// []clause.OrderBy切片
orderBys := []clause.OrderBy{
    {Column: "age", Desc: true},
    {Column: "name", Desc: false},
}
q.OrderBy(orderBys)

// clause.OrderBys集合
orderBys := clause.OrderBys{
    {Column: "age", Desc: true},
    {Column: "name", Desc: false},
}
q.OrderBy(orderBys)

分页

// 基本分页
q.Limit(10).Offset(20)

// 使用Paginate方法(页码从1开始)
q.Paginate(3, 10) // 第3页,每页10条

构建SQL

查询构建完成后,可以通过Build方法将查询转换为SQL语句:

type Builder interface {
    WriteString(s string)
    WriteQuoted(field any)
    AddVar(writer clause.Writer, vars ...any)
    AddError(err error)
}

// 自定义Builder实现
q := query.Table("users").Where("name", "John").Select("id", "name")
builder := &YourCustomBuilder{}
q.Build(builder)

错误处理

查询构建过程中如果发生错误,会将错误赋值给 Error 属性。可以通过 Error 属性判断是否有错误发生:

q := query.Table("users").Where("invalid_field", "value").Select("id", "name")
if err := q.Error; err != nil {
    // 处理错误
}

测试

运行测试:

go test ./...

示例

查看examples目录下的示例代码:

  • examples/gorm - GORM适配器示例
  • examples/ent - Ent适配器示例

许可证

MIT许可证

贡献

欢迎提交Issue和Pull Request!

联系方式

如有问题或建议,请提交Issue。

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrInvalidOperator     = errors.New("invalid operator")
	ErrInvalidCondition    = errors.New("invalid condition")
	ErrInvalidInsertValues = errors.New("invalid insert values")
	ErrInvalidOrderBy      = errors.New("invalid order by")
)

Functions

This section is empty.

Types

type DeleteQuery

type DeleteQuery struct {
	// contains filtered or unexported fields
}

DeleteQuery DELETE查询结构体

func (DeleteQuery) And

func (w DeleteQuery) And(querys ...Q) Q

And 组合多个 WHERE 条件为 AND 接受多个 *Query 类型的参数

示例:

  • And(Eq("name", "John"), Gte("age", 18))

func (*DeleteQuery) Build

func (q *DeleteQuery) Build(builder clause.Builder)

Build 构建DELETE查询的SQL语句

func (DeleteQuery) Eq

func (w DeleteQuery) Eq(column string, value any) Q

Eq 添加等于条件

func (DeleteQuery) Gt

func (w DeleteQuery) Gt(column string, value any) Q

Gt 添加大于条件

func (DeleteQuery) Gte

func (w DeleteQuery) Gte(column string, value any) Q

Gte 添加大于等于条件

func (DeleteQuery) In

func (w DeleteQuery) In(column string, values ...any) Q

In 添加 IN 条件 支持传入展开值或切片/数组,内部会自动转换为 IN 条件

示例:

  • In("city", "London", "Paris", "Berlin")
  • In("id", []int{1, 2, 3})

func (DeleteQuery) Like

func (w DeleteQuery) Like(column string, value any) Q

Like 添加 LIKE 条件

func (DeleteQuery) Lt

func (w DeleteQuery) Lt(column string, value any) Q

Lt 添加小于条件

func (DeleteQuery) Lte

func (w DeleteQuery) Lte(column string, value any) Q

Lte 添加小于等于条件

func (DeleteQuery) Neq

func (w DeleteQuery) Neq(column string, value any) Q

Neq 添加不等于条件

func (DeleteQuery) Not

func (w DeleteQuery) Not(query Q) Q

Not 对 WHERE 条件取反 接受 *Query 类型的参数

示例:

  • Not(Eq("city", "London"))

func (DeleteQuery) NotWhere deprecated

func (w DeleteQuery) NotWhere(field any, args ...any) Q

Not 添加NOT条件到当前查询

Deprecated: 使用 Not() 函数替代,例如:Not(q.Eq("name", "John"))

参数:

  • field: 字段名、表达式或表达式数组
  • args: 条件参数,格式根据field类型而定

返回值:

  • 当前实例,支持链式调用

示例:

  • q.Not("name", "John")
  • q.Not("age", ">", 18)
  • q.Not(clause.Eq{Column: "name", Value: "John"})
  • q.Not(func(w Wherer) Wherer { w.Where("name", "John"); return w.Parent })

func (DeleteQuery) Or

func (w DeleteQuery) Or(querys ...Q) Q

Or 组合多个 WHERE 条件为 OR 接受多个 *Query 类型的参数 内部使用 AND 组合多个查询条件作为一个整体

示例:

  • Or(Eq("name", "John"), Eq("name", "Jane"))

func (DeleteQuery) OrWhere deprecated

func (w DeleteQuery) OrWhere(field any, args ...any) Q

OrWhere 添加OR WHERE条件到当前查询

Deprecated: 使用 Or() 函数替代,例如:Or(q.Eq("name", "John"), q.Eq("name", "Jane"))

参数:

  • field: 字段名、表达式或表达式数组
  • args: 条件参数,格式根据field类型而定

返回值:

  • 当前实例,支持链式调用

示例:

  • q.OrWhere("name", "John")
  • q.OrWhere("age", ">", 18)
  • q.OrWhere(clause.Eq{Column: "name", Value: "John"})
  • q.OrWhere(func(w Wherer) Wherer { w.Where("name", "John"); return w.Parent })

func (DeleteQuery) Where deprecated

func (w DeleteQuery) Where(field any, args ...any) Q

Where 添加WHERE条件到当前查询

Deprecated: 使用 Eq, Neq, Gt 等方法替代,例如:q.Eq("name", "John")

参数:

  • field: 字段名、表达式或表达式数组
  • args: 条件参数,格式根据field类型而定

返回值:

  • 当前实例,支持链式调用

示例:

  • q.Where("name", "John")
  • q.Where("age", ">", 18)
  • q.Where(clause.Eq{Column: "name", Value: "John"})
  • q.Where(func(w Wherer) Wherer { w.Where("name", "John"); return w.Parent })

func (DeleteQuery) WhereExpr

func (w DeleteQuery) WhereExpr() clause.Where

WhereExpr 克隆 Where 表达式

type InsertQuery

type InsertQuery struct {
	// contains filtered or unexported fields
}

InsertQuery SELECT查询结构体

func (*InsertQuery) Build

func (q *InsertQuery) Build(builder clause.Builder)

Build 构建INSERT查询的SQL语句

func (*InsertQuery) Insert

func (q *InsertQuery) Insert(field any, args ...any) *InsertQuery

Insert 设置INSERT查询的插入值 支持三种调用方式: 1. Insert("field", value) - 设置单行单个字段值 2. Insert(map[string]any) - 插入单行数据 3. Insert(map1, map2) - 插入多行数据

type Pagination

type Pagination struct {
	Offset int
	Limit  int
}

type Query

type Query struct {
	// contains filtered or unexported fields
}

Query 基础查询结构体

func And

func And(querys ...*Query) *Query

And 组合多个 WHERE 条件为 AND

func Asc

func Asc(column string) *Query

Asc 添加升序排序

func Desc

func Desc(column string) *Query

Desc 添加降序排序

func Eq

func Eq(column string, value any) *Query

Eq 创建等于条件

func Gt

func Gt(column string, value any) *Query

Gt 创建大于条件

func Gte

func Gte(column string, value any) *Query

Gte 创建大于等于条件

func In

func In(column string, values ...any) *Query

In 添加 IN 条件 支持传入展开值或切片/数组,内部会自动转换为 IN 条件

示例:

  • In("city", "London", "Paris", "Berlin")
  • In("id", []int{1, 2, 3})

func Like

func Like(column string, value any) *Query

Like 创建 LIKE 条件

func Limit

func Limit(limit int) *Query

Limit 设置查询的限制条数

func Lt

func Lt(column string, value any) *Query

Lt 创建小于条件

func Lte

func Lte(column string, value any) *Query

Lte 创建小于等于条件

func Neq

func Neq(column string, value any) *Query

Neq 创建不等于条件

func Not

func Not(query *Query) *Query

Not 对 WHERE 条件取反

func Offset

func Offset(offset int) *Query

Offset 设置查询的偏移量

func Or

func Or(querys ...*Query) *Query

Or 组合多个 WHERE 条件为 OR

func OrWhere deprecated

func OrWhere(field any, args ...any) *Query

OrWhere 添加OR WHERE条件到当前查询

Deprecated: 使用 Or 方法替代,例如:q.Or("name", "John")

参数:

  • field: 字段名、表达式或表达式数组
  • args: 条件参数,格式根据field类型而定

返回值:

  • 当前实例,支持链式调用

示例:

  • q.OrWhere("name", "John")
  • q.OrWhere("age", ">", 18)
  • q.OrWhere(clause.Eq{Column: "name", Value: "John"})
  • q.OrWhere(func(w Wherer) Wherer { w.Where("name", "John"); return w })

func OrderBy

func OrderBy(field any, args ...any) *Query

OrderBy 添加ORDER BY子句到当前查询 参数:

  • field: 字段名、表达式或表达式数组
  • args: 排序参数,格式根据field类型而定

返回值:

  • 当前实例,支持链式调用

示例:

  • q.OrderBy("age")
  • q.OrderBy("age", "desc")
  • q.OrderBy(clause.OrderBy{Column: "age", Direction: clause.Desc})
  • q.OrderBy(func(o OrderByser) OrderByser { o.OrderBy("age"); return o })

func Paginate

func Paginate(page, pageSize int) *Query

Paginate 设置分页参数

func Table

func Table(tableName string) *Query

Table 设置查询的表名

func Where deprecated

func Where(field any, args ...any) *Query

Where 添加WHERE条件到当前查询

Deprecated: 使用 Eq, Neq, Gt 等方法替代,例如:q.Eq("name", "John")

参数:

  • field: 字段名、表达式或表达式数组
  • args: 条件参数,格式根据field类型而定

返回值:

  • 当前实例,支持链式调用

示例:

  • q.Where("name", "John")
  • q.Where("age", ">", 18)
  • q.Where(clause.Eq{Column: "name", Value: "John"})
  • q.Where(func(w Wherer) Wherer { w.Where("name", "John"); return w })

func (Query) And

func (w Query) And(querys ...Q) Q

And 组合多个 WHERE 条件为 AND 接受多个 *Query 类型的参数

示例:

  • And(Eq("name", "John"), Gte("age", 18))

func (Query) Asc

func (o Query) Asc(column string) Q

Asc 添加升序排序

func (*Query) Delete

func (q *Query) Delete() *DeleteQuery

Delete 将查询转换为DELETE查询

func (Query) Desc

func (o Query) Desc(column string) Q

Desc 添加降序排序

func (Query) Eq

func (w Query) Eq(column string, value any) Q

Eq 添加等于条件

func (Query) Gt

func (w Query) Gt(column string, value any) Q

Gt 添加大于条件

func (Query) Gte

func (w Query) Gte(column string, value any) Q

Gte 添加大于等于条件

func (Query) In

func (w Query) In(column string, values ...any) Q

In 添加 IN 条件 支持传入展开值或切片/数组,内部会自动转换为 IN 条件

示例:

  • In("city", "London", "Paris", "Berlin")
  • In("id", []int{1, 2, 3})

func (*Query) Insert

func (q *Query) Insert(field any, args ...any) *InsertQuery

Insert 设置INSERT查询的插入值 支持三种调用方式: 1. Insert("field", value) - 设置单行单个字段值 2. Insert(map[string]any) - 插入单行数据 3. Insert(map1, map2) - 插入多行数据

func (Query) Like

func (w Query) Like(column string, value any) Q

Like 添加 LIKE 条件

func (Query) Limit

func (p Query) Limit(limit int) Q

Limit 设置查询的限制条数

func (Query) Lt

func (w Query) Lt(column string, value any) Q

Lt 添加小于条件

func (Query) Lte

func (w Query) Lte(column string, value any) Q

Lte 添加小于等于条件

func (Query) Neq

func (w Query) Neq(column string, value any) Q

Neq 添加不等于条件

func (Query) Not

func (w Query) Not(query Q) Q

Not 对 WHERE 条件取反 接受 *Query 类型的参数

示例:

  • Not(Eq("city", "London"))

func (Query) NotWhere deprecated

func (w Query) NotWhere(field any, args ...any) Q

Not 添加NOT条件到当前查询

Deprecated: 使用 Not() 函数替代,例如:Not(q.Eq("name", "John"))

参数:

  • field: 字段名、表达式或表达式数组
  • args: 条件参数,格式根据field类型而定

返回值:

  • 当前实例,支持链式调用

示例:

  • q.Not("name", "John")
  • q.Not("age", ">", 18)
  • q.Not(clause.Eq{Column: "name", Value: "John"})
  • q.Not(func(w Wherer) Wherer { w.Where("name", "John"); return w.Parent })

func (Query) Offset

func (p Query) Offset(offset int) Q

Offset 设置查询的偏移量

func (Query) Or

func (w Query) Or(querys ...Q) Q

Or 组合多个 WHERE 条件为 OR 接受多个 *Query 类型的参数 内部使用 AND 组合多个查询条件作为一个整体

示例:

  • Or(Eq("name", "John"), Eq("name", "Jane"))

func (Query) OrWhere deprecated

func (w Query) OrWhere(field any, args ...any) Q

OrWhere 添加OR WHERE条件到当前查询

Deprecated: 使用 Or() 函数替代,例如:Or(q.Eq("name", "John"), q.Eq("name", "Jane"))

参数:

  • field: 字段名、表达式或表达式数组
  • args: 条件参数,格式根据field类型而定

返回值:

  • 当前实例,支持链式调用

示例:

  • q.OrWhere("name", "John")
  • q.OrWhere("age", ">", 18)
  • q.OrWhere(clause.Eq{Column: "name", Value: "John"})
  • q.OrWhere(func(w Wherer) Wherer { w.Where("name", "John"); return w.Parent })

func (Query) OrderBy

func (o Query) OrderBy(field any, orders ...any) Q

OrderBy 添加排序条件 参数:

  • field: 字段名、表达式或表达式数组
  • args: 条件参数,格式根据field类型而定

返回值:

  • 当前实例,支持链式调用

示例:

  • q.OrderBy("name", "desc") // name DESC
  • q.OrderBy("age asc") // age ASC
  • q.OrderBy(clause.OrderBy{Column: "name", Desc: true}) // 使用clause.Expression
  • q.OrderBy([]clause.OrderBy{ {Column: "name", Desc: true}, {Column: "age", Desc: false} }) // 多个排序子句

func (Query) OrderByExpr

func (o Query) OrderByExpr() clause.OrderBys

OrderByExpr 返回当前的排序表达式

func (Query) Paginate

func (p Query) Paginate(page int, pageSize int) Q

Paginate 设置分页参数

func (Query) PaginationExpr

func (p Query) PaginationExpr() clause.Pagination

PaginationExpr 返回当前的分页表达式

func (*Query) Select

func (q *Query) Select(fields ...string) *SelectQuery

Select 将查询转换为SELECT查询并设置字段

func (*Query) Table

func (q *Query) Table(tableName string) *Query

Table 设置查询的表名

func (*Query) Update

func (q *Query) Update(column any, value ...any) *UpdateQuery

Update 设置UPDATE查询的字段值 支持两种调用方式: 1. Update("field", value) - 设置单个字段值 2. Update(map[string]any) - 设置多个字段值

func (Query) Where deprecated

func (w Query) Where(field any, args ...any) Q

Where 添加WHERE条件到当前查询

Deprecated: 使用 Eq, Neq, Gt 等方法替代,例如:q.Eq("name", "John")

参数:

  • field: 字段名、表达式或表达式数组
  • args: 条件参数,格式根据field类型而定

返回值:

  • 当前实例,支持链式调用

示例:

  • q.Where("name", "John")
  • q.Where("age", ">", 18)
  • q.Where(clause.Eq{Column: "name", Value: "John"})
  • q.Where(func(w Wherer) Wherer { w.Where("name", "John"); return w.Parent })

func (Query) WhereExpr

func (w Query) WhereExpr() clause.Where

WhereExpr 克隆 Where 表达式

type SelectQuery

type SelectQuery struct {
	// contains filtered or unexported fields
}

SelectQuery SELECT查询结构体

func (SelectQuery) And

func (w SelectQuery) And(querys ...Q) Q

And 组合多个 WHERE 条件为 AND 接受多个 *Query 类型的参数

示例:

  • And(Eq("name", "John"), Gte("age", 18))

func (SelectQuery) Asc

func (o SelectQuery) Asc(column string) Q

Asc 添加升序排序

func (*SelectQuery) Build

func (q *SelectQuery) Build(builder clause.Builder)

Build 构建SELECT查询的SQL语句

func (SelectQuery) Desc

func (o SelectQuery) Desc(column string) Q

Desc 添加降序排序

func (SelectQuery) Eq

func (w SelectQuery) Eq(column string, value any) Q

Eq 添加等于条件

func (SelectQuery) Gt

func (w SelectQuery) Gt(column string, value any) Q

Gt 添加大于条件

func (SelectQuery) Gte

func (w SelectQuery) Gte(column string, value any) Q

Gte 添加大于等于条件

func (SelectQuery) In

func (w SelectQuery) In(column string, values ...any) Q

In 添加 IN 条件 支持传入展开值或切片/数组,内部会自动转换为 IN 条件

示例:

  • In("city", "London", "Paris", "Berlin")
  • In("id", []int{1, 2, 3})

func (SelectQuery) Like

func (w SelectQuery) Like(column string, value any) Q

Like 添加 LIKE 条件

func (SelectQuery) Limit

func (p SelectQuery) Limit(limit int) Q

Limit 设置查询的限制条数

func (SelectQuery) Lt

func (w SelectQuery) Lt(column string, value any) Q

Lt 添加小于条件

func (SelectQuery) Lte

func (w SelectQuery) Lte(column string, value any) Q

Lte 添加小于等于条件

func (SelectQuery) Neq

func (w SelectQuery) Neq(column string, value any) Q

Neq 添加不等于条件

func (SelectQuery) Not

func (w SelectQuery) Not(query Q) Q

Not 对 WHERE 条件取反 接受 *Query 类型的参数

示例:

  • Not(Eq("city", "London"))

func (SelectQuery) NotWhere deprecated

func (w SelectQuery) NotWhere(field any, args ...any) Q

Not 添加NOT条件到当前查询

Deprecated: 使用 Not() 函数替代,例如:Not(q.Eq("name", "John"))

参数:

  • field: 字段名、表达式或表达式数组
  • args: 条件参数,格式根据field类型而定

返回值:

  • 当前实例,支持链式调用

示例:

  • q.Not("name", "John")
  • q.Not("age", ">", 18)
  • q.Not(clause.Eq{Column: "name", Value: "John"})
  • q.Not(func(w Wherer) Wherer { w.Where("name", "John"); return w.Parent })

func (SelectQuery) Offset

func (p SelectQuery) Offset(offset int) Q

Offset 设置查询的偏移量

func (SelectQuery) Or

func (w SelectQuery) Or(querys ...Q) Q

Or 组合多个 WHERE 条件为 OR 接受多个 *Query 类型的参数 内部使用 AND 组合多个查询条件作为一个整体

示例:

  • Or(Eq("name", "John"), Eq("name", "Jane"))

func (SelectQuery) OrWhere deprecated

func (w SelectQuery) OrWhere(field any, args ...any) Q

OrWhere 添加OR WHERE条件到当前查询

Deprecated: 使用 Or() 函数替代,例如:Or(q.Eq("name", "John"), q.Eq("name", "Jane"))

参数:

  • field: 字段名、表达式或表达式数组
  • args: 条件参数,格式根据field类型而定

返回值:

  • 当前实例,支持链式调用

示例:

  • q.OrWhere("name", "John")
  • q.OrWhere("age", ">", 18)
  • q.OrWhere(clause.Eq{Column: "name", Value: "John"})
  • q.OrWhere(func(w Wherer) Wherer { w.Where("name", "John"); return w.Parent })

func (SelectQuery) OrderBy

func (o SelectQuery) OrderBy(field any, orders ...any) Q

OrderBy 添加排序条件 参数:

  • field: 字段名、表达式或表达式数组
  • args: 条件参数,格式根据field类型而定

返回值:

  • 当前实例,支持链式调用

示例:

  • q.OrderBy("name", "desc") // name DESC
  • q.OrderBy("age asc") // age ASC
  • q.OrderBy(clause.OrderBy{Column: "name", Desc: true}) // 使用clause.Expression
  • q.OrderBy([]clause.OrderBy{ {Column: "name", Desc: true}, {Column: "age", Desc: false} }) // 多个排序子句

func (SelectQuery) OrderByExpr

func (o SelectQuery) OrderByExpr() clause.OrderBys

OrderByExpr 返回当前的排序表达式

func (SelectQuery) Paginate

func (p SelectQuery) Paginate(page int, pageSize int) Q

Paginate 设置分页参数

func (SelectQuery) PaginationExpr

func (p SelectQuery) PaginationExpr() clause.Pagination

PaginationExpr 返回当前的分页表达式

func (*SelectQuery) Select

func (q *SelectQuery) Select(fields ...string) *SelectQuery

Select 设置SELECT查询的字段

func (SelectQuery) Where deprecated

func (w SelectQuery) Where(field any, args ...any) Q

Where 添加WHERE条件到当前查询

Deprecated: 使用 Eq, Neq, Gt 等方法替代,例如:q.Eq("name", "John")

参数:

  • field: 字段名、表达式或表达式数组
  • args: 条件参数,格式根据field类型而定

返回值:

  • 当前实例,支持链式调用

示例:

  • q.Where("name", "John")
  • q.Where("age", ">", 18)
  • q.Where(clause.Eq{Column: "name", Value: "John"})
  • q.Where(func(w Wherer) Wherer { w.Where("name", "John"); return w.Parent })

func (SelectQuery) WhereExpr

func (w SelectQuery) WhereExpr() clause.Where

WhereExpr 克隆 Where 表达式

type UpdateQuery

type UpdateQuery struct {
	// contains filtered or unexported fields
}

UpdateQuery UPDATE查询结构体

func (UpdateQuery) And

func (w UpdateQuery) And(querys ...Q) Q

And 组合多个 WHERE 条件为 AND 接受多个 *Query 类型的参数

示例:

  • And(Eq("name", "John"), Gte("age", 18))

func (*UpdateQuery) Build

func (q *UpdateQuery) Build(builder clause.Builder)

Build 构建UPDATE查询的SQL语句

func (UpdateQuery) Eq

func (w UpdateQuery) Eq(column string, value any) Q

Eq 添加等于条件

func (UpdateQuery) Gt

func (w UpdateQuery) Gt(column string, value any) Q

Gt 添加大于条件

func (UpdateQuery) Gte

func (w UpdateQuery) Gte(column string, value any) Q

Gte 添加大于等于条件

func (UpdateQuery) In

func (w UpdateQuery) In(column string, values ...any) Q

In 添加 IN 条件 支持传入展开值或切片/数组,内部会自动转换为 IN 条件

示例:

  • In("city", "London", "Paris", "Berlin")
  • In("id", []int{1, 2, 3})

func (UpdateQuery) Like

func (w UpdateQuery) Like(column string, value any) Q

Like 添加 LIKE 条件

func (UpdateQuery) Limit

func (p UpdateQuery) Limit(limit int) Q

Limit 设置查询的限制条数

func (UpdateQuery) Lt

func (w UpdateQuery) Lt(column string, value any) Q

Lt 添加小于条件

func (UpdateQuery) Lte

func (w UpdateQuery) Lte(column string, value any) Q

Lte 添加小于等于条件

func (UpdateQuery) Neq

func (w UpdateQuery) Neq(column string, value any) Q

Neq 添加不等于条件

func (UpdateQuery) Not

func (w UpdateQuery) Not(query Q) Q

Not 对 WHERE 条件取反 接受 *Query 类型的参数

示例:

  • Not(Eq("city", "London"))

func (UpdateQuery) NotWhere deprecated

func (w UpdateQuery) NotWhere(field any, args ...any) Q

Not 添加NOT条件到当前查询

Deprecated: 使用 Not() 函数替代,例如:Not(q.Eq("name", "John"))

参数:

  • field: 字段名、表达式或表达式数组
  • args: 条件参数,格式根据field类型而定

返回值:

  • 当前实例,支持链式调用

示例:

  • q.Not("name", "John")
  • q.Not("age", ">", 18)
  • q.Not(clause.Eq{Column: "name", Value: "John"})
  • q.Not(func(w Wherer) Wherer { w.Where("name", "John"); return w.Parent })

func (UpdateQuery) Offset

func (p UpdateQuery) Offset(offset int) Q

Offset 设置查询的偏移量

func (UpdateQuery) Or

func (w UpdateQuery) Or(querys ...Q) Q

Or 组合多个 WHERE 条件为 OR 接受多个 *Query 类型的参数 内部使用 AND 组合多个查询条件作为一个整体

示例:

  • Or(Eq("name", "John"), Eq("name", "Jane"))

func (UpdateQuery) OrWhere deprecated

func (w UpdateQuery) OrWhere(field any, args ...any) Q

OrWhere 添加OR WHERE条件到当前查询

Deprecated: 使用 Or() 函数替代,例如:Or(q.Eq("name", "John"), q.Eq("name", "Jane"))

参数:

  • field: 字段名、表达式或表达式数组
  • args: 条件参数,格式根据field类型而定

返回值:

  • 当前实例,支持链式调用

示例:

  • q.OrWhere("name", "John")
  • q.OrWhere("age", ">", 18)
  • q.OrWhere(clause.Eq{Column: "name", Value: "John"})
  • q.OrWhere(func(w Wherer) Wherer { w.Where("name", "John"); return w.Parent })

func (UpdateQuery) Paginate

func (p UpdateQuery) Paginate(page int, pageSize int) Q

Paginate 设置分页参数

func (UpdateQuery) PaginationExpr

func (p UpdateQuery) PaginationExpr() clause.Pagination

PaginationExpr 返回当前的分页表达式

func (*UpdateQuery) Update

func (q *UpdateQuery) Update(column interface{}, value ...interface{}) *UpdateQuery

Update 设置UPDATE查询的字段值 支持两种调用方式: 1. Update("field", value) - 设置单个字段值 2. Update(map[string]interface{}) - 设置多个字段值

func (UpdateQuery) Where deprecated

func (w UpdateQuery) Where(field any, args ...any) Q

Where 添加WHERE条件到当前查询

Deprecated: 使用 Eq, Neq, Gt 等方法替代,例如:q.Eq("name", "John")

参数:

  • field: 字段名、表达式或表达式数组
  • args: 条件参数,格式根据field类型而定

返回值:

  • 当前实例,支持链式调用

示例:

  • q.Where("name", "John")
  • q.Where("age", ">", 18)
  • q.Where(clause.Eq{Column: "name", Value: "John"})
  • q.Where(func(w Wherer) Wherer { w.Where("name", "John"); return w.Parent })

func (UpdateQuery) WhereExpr

func (w UpdateQuery) WhereExpr() clause.Where

WhereExpr 克隆 Where 表达式

Directories

Path Synopsis
adapter
aip module
gorm module

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL