@@ -25,21 +25,22 @@ import (
25
25
)
26
26
27
27
type QueryCond [T any ] struct {
28
- selectColumns []string
29
- distinctColumns []string
30
- queryBuilder strings.Builder
31
- orBracketBuilder strings.Builder
32
- orBracketArgs []any
33
- andBracketBuilder strings.Builder
34
- andBracketArgs []any
35
- queryArgs []any
36
- orderBuilder strings.Builder
37
- groupBuilder strings.Builder
38
- havingBuilder strings.Builder
39
- havingArgs []any
40
- lastCond string
41
- updateMap map [string ]any
42
- ConditionMap map [any ]any
28
+ selectColumns []string
29
+ distinctColumns []string
30
+ queryBuilder strings.Builder
31
+ orNestBuilder strings.Builder
32
+ orNestArgs []any
33
+ andNestBuilder strings.Builder
34
+ andNestArgs []any
35
+ queryArgs []any
36
+ orderBuilder strings.Builder
37
+ groupBuilder strings.Builder
38
+ havingBuilder strings.Builder
39
+ havingArgs []any
40
+ lastCond string
41
+ limit * int
42
+ offset int
43
+ updateMap map [string ]any
43
44
}
44
45
45
46
// NewQuery 构建查询条件
@@ -83,21 +84,6 @@ func NewQueryModel[T any, R any]() (*QueryCond[T], *T, *R) {
83
84
return q , t , r
84
85
}
85
86
86
- // NewQueryMap 构建Map查询条件
87
- func NewQueryMap [T any ]() (* QueryCond [T ], * T ) {
88
- q := & QueryCond [T ]{}
89
-
90
- modelTypeStr := reflect .TypeOf ((* T )(nil )).Elem ().String ()
91
- if model , ok := modelInstanceCache .Load (modelTypeStr ); ok {
92
- return q , model .(* T )
93
- }
94
- m := new (T )
95
- Cache (m )
96
-
97
- q .ConditionMap = make (map [any ]any )
98
- return q , m
99
- }
100
-
101
87
// Eq 等于 =
102
88
func (q * QueryCond [T ]) Eq (column any , val any ) * QueryCond [T ] {
103
89
q .addCond (column , val , constants .Eq )
@@ -223,35 +209,35 @@ func (q *QueryCond[T]) Distinct(columns ...any) *QueryCond[T] {
223
209
}
224
210
225
211
// And 拼接 AND
226
- func (q * QueryCond [T ]) And () * QueryCond [T ] {
212
+ func (q * QueryCond [T ]) And (fn ... func (q * QueryCond [T ])) * QueryCond [T ] {
213
+ if len (fn ) > 0 {
214
+ nestQuery := & QueryCond [T ]{}
215
+ fn [0 ](nestQuery )
216
+ q .andNestBuilder .WriteString (constants .And + " " + constants .LeftBracket + nestQuery .queryBuilder .String () + constants .RightBracket + " " )
217
+ q .andNestArgs = append (q .andNestArgs , nestQuery .queryArgs ... )
218
+ return q
219
+ }
227
220
q .queryBuilder .WriteString (constants .And )
228
221
q .queryBuilder .WriteString (" " )
229
222
q .lastCond = constants .And
230
223
return q
231
224
}
232
225
233
- // AndBracket 拼接 AND,括号包裹条件
234
- func (q * QueryCond [T ]) AndBracket (bracketQuery * QueryCond [T ]) * QueryCond [T ] {
235
- q .andBracketBuilder .WriteString (constants .And + " " + constants .LeftBracket + bracketQuery .queryBuilder .String () + constants .RightBracket + " " )
236
- q .andBracketArgs = append (q .andBracketArgs , bracketQuery .queryArgs ... )
237
- return q
238
- }
239
-
240
226
// Or 拼接 OR
241
- func (q * QueryCond [T ]) Or () * QueryCond [T ] {
227
+ func (q * QueryCond [T ]) Or (fn ... func (q * QueryCond [T ])) * QueryCond [T ] {
228
+ if len (fn ) > 0 {
229
+ nestQuery := & QueryCond [T ]{}
230
+ fn [0 ](nestQuery )
231
+ q .orNestBuilder .WriteString (constants .Or + " " + constants .LeftBracket + nestQuery .queryBuilder .String () + constants .RightBracket + " " )
232
+ q .orNestArgs = append (q .orNestArgs , nestQuery .queryArgs ... )
233
+ return q
234
+ }
242
235
q .queryBuilder .WriteString (constants .Or )
243
236
q .queryBuilder .WriteString (" " )
244
237
q .lastCond = constants .Or
245
238
return q
246
239
}
247
240
248
- // OrBracket 拼接 OR,括号包裹条件
249
- func (q * QueryCond [T ]) OrBracket (bracketQuery * QueryCond [T ]) * QueryCond [T ] {
250
- q .orBracketBuilder .WriteString (constants .Or + " " + constants .LeftBracket + bracketQuery .queryBuilder .String () + constants .RightBracket + " " )
251
- q .orBracketArgs = append (q .orBracketArgs , bracketQuery .queryArgs ... )
252
- return q
253
- }
254
-
255
241
// Select 查询字段
256
242
func (q * QueryCond [T ]) Select (columns ... any ) * QueryCond [T ] {
257
243
for _ , v := range columns {
@@ -319,6 +305,18 @@ func (q *QueryCond[T]) Set(column any, val any) *QueryCond[T] {
319
305
return q
320
306
}
321
307
308
+ // Limit 指的查询记录数量
309
+ func (q * QueryCond [T ]) Limit (limit int ) * QueryCond [T ] {
310
+ q .limit = & limit
311
+ return q
312
+ }
313
+
314
+ // Offset 指定跳过记录数量
315
+ func (q * QueryCond [T ]) Offset (offset int ) * QueryCond [T ] {
316
+ q .offset = offset
317
+ return q
318
+ }
319
+
322
320
func (q * QueryCond [T ]) addCond (column any , val any , condType string ) {
323
321
columnName := getColumnName (column )
324
322
q .buildAndIfNeed ()
0 commit comments