001/** 002 * Copyright (c) 2022-2023, Mybatis-Flex (fuhai999@gmail.com). 003 * <p> 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * <p> 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * <p> 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package com.mybatisflex.core.query; 017 018import com.mybatisflex.core.util.LambdaGetter; 019import com.mybatisflex.core.util.LambdaUtil; 020 021import java.util.Collection; 022import java.util.function.Predicate; 023 024public class QueryConditionBuilder { 025 026 private QueryWrapper queryWrapper; 027 private QueryColumn queryColumn; 028 private SqlConnector connector; 029 030 public QueryConditionBuilder(QueryWrapper queryWrapper, QueryColumn queryColumn, SqlConnector connector) { 031 this.queryWrapper = queryWrapper; 032 this.queryColumn = queryColumn; 033 this.connector = connector; 034 } 035 036 /** 037 * equals 038 * 039 * @param value 040 */ 041 public QueryWrapper eq(Object value) { 042 if (value != null) { 043 queryWrapper.addWhereQueryCondition(queryColumn.eq(value), connector); 044 } 045 return queryWrapper; 046 } 047 048 049 public <T> QueryWrapper eq(Object value, Predicate<T> when) { 050 if (value != null) { 051 queryWrapper.addWhereQueryCondition(queryColumn.eq(value, when), connector); 052 } 053 return queryWrapper; 054 } 055 056 057 public <T> QueryWrapper eq(LambdaGetter<T> value) { 058 return eq(LambdaUtil.getQueryColumn(value)); 059 } 060 061 062 public <T> QueryWrapper eq(LambdaGetter<T> value, Predicate<T> when) { 063 return eq(LambdaUtil.getQueryColumn(value), when); 064 } 065 066 067 /** 068 * not equals != 069 * 070 * @param value 071 */ 072 public QueryWrapper ne(Object value) { 073 if (value != null) { 074 queryWrapper.addWhereQueryCondition(queryColumn.ne(value), connector); 075 } 076 return queryWrapper; 077 } 078 079 public <T> QueryWrapper ne(Object value, Predicate<T> when) { 080 if (value != null) { 081 queryWrapper.addWhereQueryCondition(queryColumn.ne(value, when), connector); 082 } 083 return queryWrapper; 084 } 085 086 public <T> QueryWrapper ne(LambdaGetter<T> value) { 087 return ne(LambdaUtil.getQueryColumn(value)); 088 } 089 090 091 public <T> QueryWrapper ne(LambdaGetter<T> value, Predicate<T> when) { 092 return ne(LambdaUtil.getQueryColumn(value), when); 093 } 094 095 096 /** 097 * like %% 098 * 099 * @param value 100 */ 101 public QueryWrapper like(Object value) { 102 if (value != null) { 103 queryWrapper.addWhereQueryCondition(queryColumn.like(value), connector); 104 } 105 return queryWrapper; 106 } 107 108 public <T> QueryWrapper like(Object value, Predicate<T> when) { 109 if (value != null) { 110 queryWrapper.addWhereQueryCondition(queryColumn.like(value, when), connector); 111 } 112 return queryWrapper; 113 } 114 115 116 public QueryWrapper likeLeft(Object value) { 117 if (value != null) { 118 queryWrapper.addWhereQueryCondition(queryColumn.likeLeft(value), connector); 119 } 120 return queryWrapper; 121 } 122 123 public <T> QueryWrapper likeLeft(Object value, Predicate<T> when) { 124 if (value != null) { 125 queryWrapper.addWhereQueryCondition(queryColumn.likeLeft(value, when), connector); 126 } 127 return queryWrapper; 128 } 129 130 131 public QueryWrapper likeRight(Object value) { 132 if (value != null) { 133 queryWrapper.addWhereQueryCondition(queryColumn.likeRight(value), connector); 134 } 135 return queryWrapper; 136 } 137 138 public <T> QueryWrapper likeRight(Object value, Predicate<T> when) { 139 if (value != null) { 140 queryWrapper.addWhereQueryCondition(queryColumn.likeRight(value, when), connector); 141 } 142 return queryWrapper; 143 } 144 145 /** 146 * 大于 greater than 147 * 148 * @param value 149 */ 150 public QueryWrapper gt(Object value) { 151 if (value != null) { 152 queryWrapper.addWhereQueryCondition(queryColumn.gt(value), connector); 153 } 154 return queryWrapper; 155 } 156 157 public <T> QueryWrapper gt(Object value, Predicate<T> when) { 158 if (value != null) { 159 queryWrapper.addWhereQueryCondition(queryColumn.gt(value, when), connector); 160 } 161 return queryWrapper; 162 } 163 164 public <T> QueryWrapper gt(LambdaGetter<T> value) { 165 return gt(LambdaUtil.getQueryColumn(value)); 166 } 167 168 169 public <T> QueryWrapper gt(LambdaGetter<T> value, Predicate<T> when) { 170 return gt(LambdaUtil.getQueryColumn(value), when); 171 } 172 173 174 /** 175 * 大于等于 greater or equal 176 * 177 * @param value 178 */ 179 public QueryWrapper ge(Object value) { 180 if (value != null) { 181 queryWrapper.addWhereQueryCondition(queryColumn.ge(value), connector); 182 } 183 return queryWrapper; 184 } 185 186 public <T> QueryWrapper ge(Object value, Predicate<T> when) { 187 if (value != null) { 188 queryWrapper.addWhereQueryCondition(queryColumn.ge(value, when), connector); 189 } 190 return queryWrapper; 191 } 192 193 public <T> QueryWrapper ge(LambdaGetter<T> value) { 194 return ge(LambdaUtil.getQueryColumn(value)); 195 } 196 197 198 public <T> QueryWrapper ge(LambdaGetter<T> value, Predicate<T> when) { 199 return ge(LambdaUtil.getQueryColumn(value), when); 200 } 201 202 /** 203 * 小于 less than 204 * 205 * @param value 206 */ 207 public QueryWrapper lt(Object value) { 208 if (value != null) { 209 queryWrapper.addWhereQueryCondition(queryColumn.lt(value), connector); 210 } 211 return queryWrapper; 212 } 213 214 public <T> QueryWrapper lt(Object value, Predicate<T> when) { 215 if (value != null) { 216 queryWrapper.addWhereQueryCondition(queryColumn.lt(value, when), connector); 217 } 218 return queryWrapper; 219 } 220 221 public <T> QueryWrapper lt(LambdaGetter<T> value) { 222 return lt(LambdaUtil.getQueryColumn(value)); 223 } 224 225 226 public <T> QueryWrapper lt(LambdaGetter<T> value, Predicate<T> when) { 227 return lt(LambdaUtil.getQueryColumn(value), when); 228 } 229 230 /** 231 * 小于等于 less or equal 232 * 233 * @param value 234 */ 235 public QueryWrapper le(Object value) { 236 if (value != null) { 237 queryWrapper.addWhereQueryCondition(queryColumn.le(value), connector); 238 } 239 return queryWrapper; 240 } 241 242 243 public <T> QueryWrapper le(Object value, Predicate<T> when) { 244 if (value != null) { 245 queryWrapper.addWhereQueryCondition(queryColumn.le(value, when), connector); 246 } 247 return queryWrapper; 248 } 249 250 public <T> QueryWrapper le(LambdaGetter<T> value) { 251 return le(LambdaUtil.getQueryColumn(value)); 252 } 253 254 255 public <T> QueryWrapper le(LambdaGetter<T> value, Predicate<T> when) { 256 return le(LambdaUtil.getQueryColumn(value), when); 257 } 258 259 260 /** 261 * IS NULL 262 * 263 * @return 264 */ 265 public QueryWrapper isNull() { 266 queryWrapper.addWhereQueryCondition(queryColumn.isNull(), connector); 267 return queryWrapper; 268 } 269 270 public <T> QueryWrapper isNull(Predicate<T> when) { 271 queryWrapper.addWhereQueryCondition(queryColumn.isNull(when), connector); 272 return queryWrapper; 273 } 274 275 276 /** 277 * IS NOT NULL 278 * 279 * @return 280 */ 281 public QueryWrapper isNotNull() { 282 queryWrapper.addWhereQueryCondition(queryColumn.isNotNull(), connector); 283 return queryWrapper; 284 } 285 286 public <T> QueryWrapper isNotNull(Predicate<T> when) { 287 queryWrapper.addWhereQueryCondition(queryColumn.isNotNull(when), connector); 288 return queryWrapper; 289 } 290 291 292 /** 293 * in arrays 294 * 295 * @param arrays 296 * @return 297 */ 298 public QueryWrapper in(Object... arrays) { 299 if (arrays != null) { 300 queryWrapper.addWhereQueryCondition(queryColumn.in(arrays), connector); 301 } 302 return queryWrapper; 303 } 304 305 public <T> QueryWrapper in(Object[] arrays, Predicate<T> when) { 306 //忽略 QueryWrapper.in("name", null) 的情况 307 if (arrays != null) { 308 queryWrapper.addWhereQueryCondition(queryColumn.in(arrays, when), connector); 309 } 310 return queryWrapper; 311 } 312 313 /** 314 * in child select 315 * 316 * @param queryWrapper 317 * @return 318 */ 319 public QueryWrapper in(QueryWrapper queryWrapper) { 320 if (queryWrapper != null) { 321 queryWrapper.addWhereQueryCondition(queryColumn.in(queryWrapper), connector); 322 } 323 return queryWrapper; 324 } 325 326 public <T> QueryWrapper in(QueryWrapper queryWrapper, Predicate<T> when) { 327 if (queryWrapper != null) { 328 queryWrapper.addWhereQueryCondition(queryColumn.in(queryWrapper, when), connector); 329 } 330 return queryWrapper; 331 } 332 333 334 /** 335 * in Collection 336 * 337 * @param collection 338 * @return 339 */ 340 public QueryWrapper in(Collection<?> collection) { 341 if (queryWrapper != null) { 342 queryWrapper.addWhereQueryCondition(queryColumn.in(collection), connector); 343 } 344 return queryWrapper; 345 } 346 347 public <T> QueryWrapper in(Collection<?> collection, Predicate<T> when) { 348 if (queryWrapper != null) { 349 queryWrapper.addWhereQueryCondition(queryColumn.in(collection, when), connector); 350 } 351 return queryWrapper; 352 } 353 354 /** 355 * not int arrays 356 * 357 * @param arrays 358 * @return 359 */ 360 public QueryWrapper notIn(Object... arrays) { 361 if (queryWrapper != null) { 362 queryWrapper.addWhereQueryCondition(queryColumn.notIn(arrays), connector); 363 } 364 return queryWrapper; 365 } 366 367 public <T> QueryWrapper notIn(Object[] arrays, Predicate<T> when) { 368 if (queryWrapper != null) { 369 queryWrapper.addWhereQueryCondition(queryColumn.notIn(arrays, when), connector); 370 } 371 return queryWrapper; 372 } 373 374 375 /** 376 * not in Collection 377 * 378 * @param collection 379 * @return 380 */ 381 public QueryWrapper notIn(Collection<?> collection) { 382 if (queryWrapper != null) { 383 queryWrapper.addWhereQueryCondition(queryColumn.notIn(collection), connector); 384 } 385 return queryWrapper; 386 } 387 388 public <T> QueryWrapper notIn(Collection<?> collection, Predicate<T> when) { 389 if (queryWrapper != null) { 390 queryWrapper.addWhereQueryCondition(queryColumn.notIn(collection, when), connector); 391 } 392 return queryWrapper; 393 } 394 395 /** 396 * not in child select 397 * 398 * @param queryWrapper 399 */ 400 public QueryWrapper notIn(QueryWrapper queryWrapper) { 401 if (queryWrapper != null) { 402 queryWrapper.addWhereQueryCondition(queryColumn.notIn(queryWrapper), connector); 403 } 404 return queryWrapper; 405 } 406 407 public <T> QueryWrapper notIn(QueryWrapper queryWrapper, Predicate<T> when) { 408 if (queryWrapper != null) { 409 queryWrapper.addWhereQueryCondition(queryColumn.notIn(queryWrapper, when), connector); 410 } 411 return queryWrapper; 412 } 413 414 415 /** 416 * between 417 * 418 * @param start 419 * @param end 420 */ 421 public QueryWrapper between(Object start, Object end) { 422 if (queryWrapper != null) { 423 queryWrapper.addWhereQueryCondition(queryColumn.between(start, end), connector); 424 } 425 return queryWrapper; 426 } 427 428 429 public <T> QueryWrapper between(Object start, Object end, Predicate<T> when) { 430 if (queryWrapper != null) { 431 queryWrapper.addWhereQueryCondition(queryColumn.between(start, end, when), connector); 432 } 433 return queryWrapper; 434 } 435 436 437 /** 438 * not between 439 * 440 * @param start 441 * @param end 442 */ 443 public QueryWrapper notBetween(Object start, Object end) { 444 if (queryWrapper != null) { 445 queryWrapper.addWhereQueryCondition(queryColumn.notBetween(start, end), connector); 446 } 447 return queryWrapper; 448 } 449 450 public <T> QueryWrapper notBetween(Object start, Object end, Predicate<T> when) { 451 if (queryWrapper != null) { 452 queryWrapper.addWhereQueryCondition(queryColumn.notBetween(start, end, when), connector); 453 } 454 return queryWrapper; 455 } 456 457 458}