mirror of
				https://gitee.com/dromara/mayfly-go
				synced 2025-11-04 08:20:25 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			167 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			167 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package model
 | 
						||
 | 
						||
import (
 | 
						||
	"fmt"
 | 
						||
	"mayfly-go/pkg/consts"
 | 
						||
	"mayfly-go/pkg/utils/anyx"
 | 
						||
	"mayfly-go/pkg/utils/collx"
 | 
						||
)
 | 
						||
 | 
						||
type QueryCond struct {
 | 
						||
	selectColumns []string // 查询的列信息
 | 
						||
	condModel     any      // 条件模型
 | 
						||
 | 
						||
	wheres  collx.M
 | 
						||
	orderBy []string
 | 
						||
 | 
						||
	dest any // 结果集指针
 | 
						||
}
 | 
						||
 | 
						||
// NewCond 构建查询条件
 | 
						||
func NewCond() *QueryCond {
 | 
						||
	return &QueryCond{}
 | 
						||
}
 | 
						||
 | 
						||
// NewModelCond  新建模型条件(使用模型中非零值作为条件)
 | 
						||
func NewModelCond(condModel any) *QueryCond {
 | 
						||
	return &QueryCond{condModel: condModel}
 | 
						||
}
 | 
						||
 | 
						||
// 设置结果集绑定的指针
 | 
						||
func (q *QueryCond) Dest(dest any) *QueryCond {
 | 
						||
	q.dest = dest
 | 
						||
	return q
 | 
						||
}
 | 
						||
 | 
						||
// Columns 设置查询的列
 | 
						||
func (q *QueryCond) Columns(columns ...string) *QueryCond {
 | 
						||
	q.selectColumns = columns
 | 
						||
	return q
 | 
						||
}
 | 
						||
 | 
						||
func (q *QueryCond) OrderByDesc(column string) *QueryCond {
 | 
						||
	return q.OrderBy(fmt.Sprintf("%s DESC", column))
 | 
						||
}
 | 
						||
 | 
						||
func (q *QueryCond) OrderByAsc(column string) *QueryCond {
 | 
						||
	return q.OrderBy(fmt.Sprintf("%s ASC", column))
 | 
						||
}
 | 
						||
 | 
						||
func (q *QueryCond) OrderBy(orderBy ...string) *QueryCond {
 | 
						||
	q.orderBy = append(q.orderBy, orderBy...)
 | 
						||
	return q
 | 
						||
}
 | 
						||
 | 
						||
// Eq 等于 =
 | 
						||
func (q *QueryCond) Eq(column string, val any) *QueryCond {
 | 
						||
	return q.Cond(consts.Eq, column, val, true)
 | 
						||
}
 | 
						||
 | 
						||
// Eq 等于 = (零值也不忽略该添加)
 | 
						||
func (q *QueryCond) Eq0(column string, val any) *QueryCond {
 | 
						||
	return q.Cond(consts.Eq, column, val, false)
 | 
						||
}
 | 
						||
 | 
						||
// Like LIKE %xx%
 | 
						||
func (q *QueryCond) Like(column string, val string) *QueryCond {
 | 
						||
	if val == "" {
 | 
						||
		return q
 | 
						||
	}
 | 
						||
	return q.Cond(consts.Like, column, "%"+val+"%", false)
 | 
						||
}
 | 
						||
 | 
						||
// RLike LIKE xx%
 | 
						||
func (q *QueryCond) RLike(column string, val string) *QueryCond {
 | 
						||
	if val == "" {
 | 
						||
		return q
 | 
						||
	}
 | 
						||
	return q.Cond(consts.Like, column, val+"%", false)
 | 
						||
}
 | 
						||
 | 
						||
func (q *QueryCond) In(column string, val any) *QueryCond {
 | 
						||
	return q.Cond(consts.In, column, val, true)
 | 
						||
}
 | 
						||
 | 
						||
func (q *QueryCond) NotIn(column string, val any) *QueryCond {
 | 
						||
	return q.Cond(consts.NotIn, column, val, true)
 | 
						||
}
 | 
						||
 | 
						||
func (q *QueryCond) In0(column string, val any) *QueryCond {
 | 
						||
	return q.Cond(consts.In, column, val, true)
 | 
						||
}
 | 
						||
 | 
						||
// // Ne 不等于 !=
 | 
						||
func (q *QueryCond) Ne(column string, val any) *QueryCond {
 | 
						||
	q.Cond(consts.Ne, column, val, true)
 | 
						||
	return q
 | 
						||
}
 | 
						||
 | 
						||
// Gt 大于 >
 | 
						||
func (q *QueryCond) Gt(column string, val any) *QueryCond {
 | 
						||
	q.Cond(consts.Gt, column, val, true)
 | 
						||
	return q
 | 
						||
}
 | 
						||
 | 
						||
// Ge 大于等于 >=
 | 
						||
func (q *QueryCond) Ge(column string, val any) *QueryCond {
 | 
						||
	q.Cond(consts.Ge, column, val, true)
 | 
						||
	return q
 | 
						||
}
 | 
						||
 | 
						||
// Lt 小于 <
 | 
						||
func (q *QueryCond) Lt(column string, val any) *QueryCond {
 | 
						||
	q.Cond(consts.Lt, column, val, true)
 | 
						||
	return q
 | 
						||
}
 | 
						||
 | 
						||
// Le 小于等于 <=
 | 
						||
func (q *QueryCond) Le(column string, val any) *QueryCond {
 | 
						||
	q.Cond(consts.Le, column, val, true)
 | 
						||
	return q
 | 
						||
}
 | 
						||
 | 
						||
// And条件
 | 
						||
func (q *QueryCond) And(column string, val any) *QueryCond {
 | 
						||
	if q.wheres == nil {
 | 
						||
		q.wheres = collx.M{}
 | 
						||
	}
 | 
						||
	q.wheres[column] = val
 | 
						||
	return q
 | 
						||
}
 | 
						||
 | 
						||
func (q *QueryCond) Cond(cond, column string, val any, skipBlank bool) *QueryCond {
 | 
						||
	// 零值跳过
 | 
						||
	if skipBlank && anyx.IsBlank(val) {
 | 
						||
		return q
 | 
						||
	}
 | 
						||
	return q.And(fmt.Sprintf("%s %s ?", column, cond), val)
 | 
						||
}
 | 
						||
 | 
						||
func (q *QueryCond) GetWheres() collx.M {
 | 
						||
	return q.wheres
 | 
						||
}
 | 
						||
 | 
						||
func (q *QueryCond) GetCondModel() any {
 | 
						||
	return q.condModel
 | 
						||
}
 | 
						||
 | 
						||
func (q *QueryCond) GetSelectColumns() []string {
 | 
						||
	return q.selectColumns
 | 
						||
}
 | 
						||
 | 
						||
func (q *QueryCond) GetOrderBy() []string {
 | 
						||
	return q.orderBy
 | 
						||
}
 | 
						||
 | 
						||
// 获取输出目标结果集指针,若dest为空,则使用condModel
 | 
						||
func (q *QueryCond) GetDest() any {
 | 
						||
	if !anyx.IsBlank(q.dest) {
 | 
						||
		return q.dest
 | 
						||
	}
 | 
						||
	if !anyx.IsBlank(q.condModel) {
 | 
						||
		return q.condModel
 | 
						||
	}
 | 
						||
 | 
						||
	panic("*model.QueryCond dest and condModel is nil")
 | 
						||
}
 |