Files
gorose-pro/orm_query_interface.go
tuuz dd25d0fd26 v1.14.0 FIX/New
- 修复db.Chunk功能在limit为1时只能取到一条数据,当limit为多时又会一次性取出多条数据而不是一条一条获取一条一条处理的BUG
- 新增db.ChunkWG多线程大量数据读取处理方法
2024-02-18 17:46:20 +08:00

47 lines
2.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package gorose
// IOrmQuery ...
type IOrmQuery interface {
// 获取数据, 依据传入的绑定对象, 选择查询一条或多条数据并绑定到传入对象上
// 当绑定对象传入的是string类型时, 返回多条结果集, 需要使用 Get() 来获取最终结果
Select() error
//Scan 方法传入struct{}可以解析单条类似Find方法输入[]struct{}将会解析成多条类似Get方法
Scan(scan_to_struct interface{}) error
// 获取一条结果并返回, 只有当传入的table对象是字符串时生效
First() (Data, error)
Find() (Data, error)
// 获取多条结果并返回, 只有当传入的table对象是字符串时生效
Get() ([]Data, error)
// 如果你不需要完整的一行,可以使用 value 方法从结果中获取单个值,该方法会直接返回指定列的值:
Value(field string) (v interface{}, err error)
Column(field string) (v []interface{}, err error)
// 如果想要获取包含单个列值的数组,可以使用 pluck 方法
// 还可以在返回数组中为列值指定自定义键(该自定义键必须是该表的其它字段列名,否则会报错)
Pluck(field string, fieldKey ...string) (v interface{}, err error)
// 查询构建器还提供了多个聚合方法如count, max, min, avg 和 sum你可以在构造查询之后调用这些方法
Count(args ...string) (int64, error)
Counts(args ...string) (int64, error)
Sum(sum string) (interface{}, error)
Avg(avg string) (interface{}, error)
Max(max string) (interface{}, error)
Min(min string) (interface{}, error)
// 分页, 返回分页需要的基本数据
Paginate(page ...int) (res Data, err error)
Paginator(page ...int) (res Paginate, err error)
//PaginatorWG采用协程架构在RDS环境中测试有20-50%的性能提高IO时间越长提高越多
PaginatorWG(page ...int) (res Paginate, err error)
// 组块结果集
// 如果你需要处理成千上万或者更多条数据库记录,可以考虑使用 chunk 方法,该方法一次获取结果集的一小块,
// 然后传递每一小块数据到闭包函数进行处理,该方法在编写处理大量数据库记录的 Artisan 命令的时候非常有用。
// 例如,我们可以将处理全部 users 表数据分割成一次处理 100 条记录的小组块
// 你可以通过从闭包函数中返回 err 来终止组块的运行
Chunk(limit int, callback func([]Data) error) (err error)
// ChunkWG : ChunkWG是保留Chunk的使用方法的基础上新增多线程读取&多线程执行的方式注意onetime_exec_thread不宜过多推荐4不宜过大因为采用的是盲读的方法详情请参考github-wiki的介绍部分
ChunkWG(onetime_exec_thread int, limit int, callback func([]Data) error) (err error)
// 跟Chunk类似,只不过callback的是传入的结构体
ChunkStruct(limit int, callback func() error) (err error)
Loop(limit int, callback func([]Data) error) (err error)
}