@@ -26,6 +26,7 @@ import (
26
26
27
27
type QueryCond [T any ] struct {
28
28
selectColumns []string
29
+ omitColumns []string
29
30
distinctColumns []string
30
31
queryExpressions []any
31
32
orderBuilder strings.Builder
@@ -37,6 +38,7 @@ type QueryCond[T any] struct {
37
38
limit * int
38
39
offset int
39
40
updateMap map [string ]any
41
+ columnTypeMap map [string ]reflect.Type
40
42
}
41
43
42
44
func (q * QueryCond [T ]) getSqlSegment () string {
@@ -46,7 +48,6 @@ func (q *QueryCond[T]) getSqlSegment() string {
46
48
// NewQuery 构建查询条件
47
49
func NewQuery [T any ]() (* QueryCond [T ], * T ) {
48
50
q := & QueryCond [T ]{}
49
-
50
51
modelTypeStr := reflect .TypeOf ((* T )(nil )).Elem ().String ()
51
52
if model , ok := modelInstanceCache .Load (modelTypeStr ); ok {
52
53
m , isReal := model .(* T )
@@ -150,13 +151,27 @@ func (q *QueryCond[T]) LikeLeft(column any, val any) *QueryCond[T] {
150
151
return q
151
152
}
152
153
154
+ // NotLikeLeft 非左模糊 NOT LIKE '%值'
155
+ func (q * QueryCond [T ]) NotLikeLeft (column any , val any ) * QueryCond [T ] {
156
+ s := fmt .Sprintf ("%v" , val )
157
+ q .addExpression (q .buildSqlSegment (column , constants .Not + " " + constants .Like , "%" + s )... )
158
+ return q
159
+ }
160
+
153
161
// LikeRight 右模糊 LIKE '值%'
154
162
func (q * QueryCond [T ]) LikeRight (column any , val any ) * QueryCond [T ] {
155
163
s := fmt .Sprintf ("%v" , val )
156
164
q .addExpression (q .buildSqlSegment (column , constants .Like , s + "%" )... )
157
165
return q
158
166
}
159
167
168
+ // NotLikeRight 非右模糊 NOT LIKE '值%'
169
+ func (q * QueryCond [T ]) NotLikeRight (column any , val any ) * QueryCond [T ] {
170
+ s := fmt .Sprintf ("%v" , val )
171
+ q .addExpression (q .buildSqlSegment (column , constants .Not + " " + constants .Like , s + "%" )... )
172
+ return q
173
+ }
174
+
160
175
// IsNull 是否为空 字段 IS NULL
161
176
func (q * QueryCond [T ]) IsNull (column any ) * QueryCond [T ] {
162
177
q .addExpression (q .buildSqlSegment (column , constants .IsNull , "" )... )
@@ -284,6 +299,15 @@ func (q *QueryCond[T]) Select(columns ...any) *QueryCond[T] {
284
299
return q
285
300
}
286
301
302
+ // Omit 忽略字段
303
+ func (q * QueryCond [T ]) Omit (columns ... any ) * QueryCond [T ] {
304
+ for _ , v := range columns {
305
+ columnName := getColumnName (v )
306
+ q .omitColumns = append (q .omitColumns , columnName )
307
+ }
308
+ return q
309
+ }
310
+
287
311
// Set 设置更新的字段
288
312
func (q * QueryCond [T ]) Set (column any , val any ) * QueryCond [T ] {
289
313
columnName := getColumnName (column )
0 commit comments