@@ -56,7 +56,7 @@ func (q *Query[T]) Like(column string, val any) *Query[T] {
56
56
57
57
func (q * Query [T ]) NotLike (column string , val any ) * Query [T ] {
58
58
s := val .(string )
59
- q .addCond (column , "%" + s + "%" , constants .Not + constants .Like )
59
+ q .addCond (column , "%" + s + "%" , constants .Not + " " + constants .Like )
60
60
return q
61
61
}
62
62
@@ -72,19 +72,40 @@ func (q *Query[T]) LikeRight(column string, val any) *Query[T] {
72
72
return q
73
73
}
74
74
75
+ func (q * Query [T ]) IsNull (column string ) * Query [T ] {
76
+ q .buildAndIfNeed ()
77
+ cond := fmt .Sprintf ("%s is null" , column )
78
+ q .QueryBuilder .WriteString (cond )
79
+ return q
80
+ }
81
+
82
+ func (q * Query [T ]) IsNotNull (column string ) * Query [T ] {
83
+ q .buildAndIfNeed ()
84
+ cond := fmt .Sprintf ("%s is not null" , column )
85
+ q .QueryBuilder .WriteString (cond )
86
+ return q
87
+ }
88
+
75
89
func (q * Query [T ]) In (column string , val ... any ) * Query [T ] {
76
90
q .addCond (column , val , constants .In )
77
91
return q
78
92
}
79
93
94
+ func (q * Query [T ]) NotIn (column string , val ... any ) * Query [T ] {
95
+ q .addCond (column , val , constants .Not + " " + constants .In )
96
+ return q
97
+ }
98
+
80
99
func (q * Query [T ]) Between (column string , start , end any ) * Query [T ] {
100
+ q .buildAndIfNeed ()
81
101
cond := fmt .Sprintf ("%s %s ? and ? " , column , constants .Between )
82
102
q .QueryBuilder .WriteString (cond )
83
103
q .QueryArgs = append (q .QueryArgs , start , end )
84
104
return q
85
105
}
86
106
87
107
func (q * Query [T ]) NotBetween (column string , start , end any ) * Query [T ] {
108
+ q .buildAndIfNeed ()
88
109
cond := fmt .Sprintf ("%s %s %s ? and ? " , column , constants .Not , constants .Between )
89
110
q .QueryBuilder .WriteString (cond )
90
111
q .QueryArgs = append (q .QueryArgs , start , end )
@@ -142,17 +163,21 @@ func (q *Query[T]) Having(having string, args ...any) *Query[T] {
142
163
}
143
164
144
165
func (q * Query [T ]) addCond (column string , val any , condType string ) {
145
- if q .LastCond != constants .And && q .LastCond != constants .Or && q .QueryBuilder .Len () > 0 {
146
- q .QueryBuilder .WriteString (constants .And )
147
- q .QueryBuilder .WriteString (" " )
148
- }
166
+ q .buildAndIfNeed ()
149
167
cond := fmt .Sprintf ("%s %s ?" , column , condType )
150
168
q .QueryBuilder .WriteString (cond )
151
169
q .QueryBuilder .WriteString (" " )
152
170
q .LastCond = ""
153
171
q .QueryArgs = append (q .QueryArgs , val )
154
172
}
155
173
174
+ func (q * Query [T ]) buildAndIfNeed () {
175
+ if q .LastCond != constants .And && q .LastCond != constants .Or && q .QueryBuilder .Len () > 0 {
176
+ q .QueryBuilder .WriteString (constants .And )
177
+ q .QueryBuilder .WriteString (" " )
178
+ }
179
+ }
180
+
156
181
func (q * Query [T ]) buildOrder (orderType string , columns ... string ) {
157
182
for _ , v := range columns {
158
183
if q .OrderBuilder .Len () > 0 {
0 commit comments