001/* 002 * Copyright (c) 2022-2025, 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.constant.SqlConnector; 019import com.mybatisflex.core.util.LambdaGetter; 020import com.mybatisflex.core.util.LambdaUtil; 021 022import java.util.Collection; 023import java.util.function.BiPredicate; 024import java.util.function.BooleanSupplier; 025import java.util.function.Predicate; 026 027public class QueryConditionBuilder<Wrapper extends QueryWrapper> implements Conditional<Wrapper> { 028 029 private final Wrapper queryWrapper; 030 private final QueryColumn queryColumn; 031 private final SqlConnector connector; 032 033 034 public QueryConditionBuilder(Wrapper queryWrapper, QueryColumn queryColumn, SqlConnector connector) { 035 this.queryWrapper = queryWrapper; 036 this.queryColumn = queryColumn; 037 this.connector = connector; 038 } 039 040 private void addWhereQueryCondition(QueryCondition queryCondition) { 041 queryWrapper.addWhereQueryCondition(queryCondition, connector); 042 } 043 044 @Override 045 public Wrapper eq(Object value) { 046 addWhereQueryCondition(queryColumn.eq(value)); 047 return queryWrapper; 048 } 049 050 @Override 051 public Wrapper eq(Object value, boolean isEffective) { 052 addWhereQueryCondition(queryColumn.eq(value, isEffective)); 053 return queryWrapper; 054 } 055 056 @Override 057 public Wrapper eq(Object value, BooleanSupplier isEffective) { 058 addWhereQueryCondition(queryColumn.eq(value, isEffective)); 059 return queryWrapper; 060 } 061 062 @Override 063 public <T> Wrapper eq(T value, Predicate<T> isEffective) { 064 addWhereQueryCondition(queryColumn.eq(value, isEffective)); 065 return queryWrapper; 066 } 067 068 /** 069 * 等于 {@code =} 070 */ 071 public <T> Wrapper eq(LambdaGetter<T> value) { 072 return eq(LambdaUtil.getQueryColumn(value), true); 073 } 074 075 /** 076 * 等于 {@code =} 077 */ 078 public <T> Wrapper eq(LambdaGetter<T> value, boolean isEffective) { 079 return eq(LambdaUtil.getQueryColumn(value), isEffective); 080 } 081 082 /** 083 * 等于 {@code =} 084 */ 085 public <T> Wrapper eq(LambdaGetter<T> value, BooleanSupplier isEffective) { 086 return eq(LambdaUtil.getQueryColumn(value), isEffective.getAsBoolean()); 087 } 088 089 @Override 090 public Wrapper ne(Object value) { 091 addWhereQueryCondition(queryColumn.ne(value)); 092 return queryWrapper; 093 } 094 095 @Override 096 public Wrapper ne(Object value, boolean isEffective) { 097 addWhereQueryCondition(queryColumn.ne(value, isEffective)); 098 return queryWrapper; 099 } 100 101 @Override 102 public Wrapper ne(Object value, BooleanSupplier isEffective) { 103 addWhereQueryCondition(queryColumn.ne(value, isEffective)); 104 return queryWrapper; 105 } 106 107 @Override 108 public <T> Wrapper ne(T value, Predicate<T> isEffective) { 109 addWhereQueryCondition(queryColumn.ne(value, isEffective)); 110 return queryWrapper; 111 } 112 113 /** 114 * 不等于 {@code !=} 115 */ 116 public <T> Wrapper ne(LambdaGetter<T> value) { 117 return ne(LambdaUtil.getQueryColumn(value), true); 118 } 119 120 /** 121 * 不等于 {@code !=} 122 */ 123 public <T> Wrapper ne(LambdaGetter<T> value, boolean isEffective) { 124 return ne(LambdaUtil.getQueryColumn(value), isEffective); 125 } 126 127 /** 128 * 不等于 {@code !=} 129 */ 130 public <T> Wrapper ne(LambdaGetter<T> value, BooleanSupplier isEffective) { 131 return ne(LambdaUtil.getQueryColumn(value), isEffective.getAsBoolean()); 132 } 133 134 @Override 135 public Wrapper gt(Object value) { 136 addWhereQueryCondition(queryColumn.gt(value)); 137 return queryWrapper; 138 } 139 140 @Override 141 public Wrapper gt(Object value, boolean isEffective) { 142 addWhereQueryCondition(queryColumn.gt(value, isEffective)); 143 return queryWrapper; 144 } 145 146 @Override 147 public Wrapper gt(Object value, BooleanSupplier isEffective) { 148 addWhereQueryCondition(queryColumn.gt(value, isEffective)); 149 return queryWrapper; 150 } 151 152 @Override 153 public <T> Wrapper gt(T value, Predicate<T> isEffective) { 154 addWhereQueryCondition(queryColumn.gt(value, isEffective)); 155 return queryWrapper; 156 } 157 158 /** 159 * 大于 {@code >} 160 */ 161 public <T> Wrapper gt(LambdaGetter<T> value) { 162 return gt(LambdaUtil.getQueryColumn(value), true); 163 } 164 165 /** 166 * 大于 {@code >} 167 */ 168 public <T> Wrapper gt(LambdaGetter<T> value, boolean isEffective) { 169 return gt(LambdaUtil.getQueryColumn(value), isEffective); 170 } 171 172 /** 173 * 大于 {@code >} 174 */ 175 public <T> Wrapper gt(LambdaGetter<T> value, BooleanSupplier isEffective) { 176 return gt(LambdaUtil.getQueryColumn(value), isEffective.getAsBoolean()); 177 } 178 179 @Override 180 public Wrapper ge(Object value) { 181 addWhereQueryCondition(queryColumn.ge(value)); 182 return queryWrapper; 183 } 184 185 @Override 186 public Wrapper ge(Object value, boolean isEffective) { 187 addWhereQueryCondition(queryColumn.ge(value, isEffective)); 188 return queryWrapper; 189 } 190 191 @Override 192 public Wrapper ge(Object value, BooleanSupplier isEffective) { 193 addWhereQueryCondition(queryColumn.ge(value, isEffective)); 194 return queryWrapper; 195 } 196 197 @Override 198 public <T> Wrapper ge(T value, Predicate<T> isEffective) { 199 addWhereQueryCondition(queryColumn.ge(value, isEffective)); 200 return queryWrapper; 201 } 202 203 /** 204 * 大于等于 {@code >=} 205 */ 206 public <T> Wrapper ge(LambdaGetter<T> value) { 207 return ge(LambdaUtil.getQueryColumn(value), true); 208 } 209 210 /** 211 * 大于等于 {@code >=} 212 */ 213 public <T> Wrapper ge(LambdaGetter<T> value, boolean isEffective) { 214 return ge(LambdaUtil.getQueryColumn(value), isEffective); 215 } 216 217 /** 218 * 大于等于 {@code >=} 219 */ 220 public <T> Wrapper ge(LambdaGetter<T> value, BooleanSupplier isEffective) { 221 return ge(LambdaUtil.getQueryColumn(value), isEffective.getAsBoolean()); 222 } 223 224 @Override 225 public Wrapper lt(Object value) { 226 addWhereQueryCondition(queryColumn.lt(value)); 227 return queryWrapper; 228 } 229 230 @Override 231 public Wrapper lt(Object value, boolean isEffective) { 232 addWhereQueryCondition(queryColumn.lt(value, isEffective)); 233 return queryWrapper; 234 } 235 236 @Override 237 public Wrapper lt(Object value, BooleanSupplier isEffective) { 238 addWhereQueryCondition(queryColumn.lt(value, isEffective)); 239 return queryWrapper; 240 } 241 242 @Override 243 public <T> Wrapper lt(T value, Predicate<T> isEffective) { 244 addWhereQueryCondition(queryColumn.lt(value, isEffective)); 245 return queryWrapper; 246 } 247 248 /** 249 * 小于 {@code <} 250 */ 251 public <T> Wrapper lt(LambdaGetter<T> value) { 252 return lt(LambdaUtil.getQueryColumn(value), true); 253 } 254 255 /** 256 * 小于 {@code <} 257 */ 258 public <T> Wrapper lt(LambdaGetter<T> value, boolean isEffective) { 259 return lt(LambdaUtil.getQueryColumn(value), isEffective); 260 } 261 262 /** 263 * 小于 {@code <} 264 */ 265 public <T> Wrapper lt(LambdaGetter<T> value, BooleanSupplier isEffective) { 266 return lt(LambdaUtil.getQueryColumn(value), isEffective.getAsBoolean()); 267 } 268 269 @Override 270 public Wrapper le(Object value) { 271 addWhereQueryCondition(queryColumn.le(value)); 272 return queryWrapper; 273 } 274 275 @Override 276 public Wrapper le(Object value, boolean isEffective) { 277 addWhereQueryCondition(queryColumn.le(value, isEffective)); 278 return queryWrapper; 279 } 280 281 @Override 282 public Wrapper le(Object value, BooleanSupplier isEffective) { 283 addWhereQueryCondition(queryColumn.le(value, isEffective)); 284 return queryWrapper; 285 } 286 287 @Override 288 public <T> Wrapper le(T value, Predicate<T> isEffective) { 289 addWhereQueryCondition(queryColumn.le(value, isEffective)); 290 return queryWrapper; 291 } 292 293 /** 294 * 小于等于 {@code <=} 295 */ 296 public <T> Wrapper le(LambdaGetter<T> value) { 297 return le(LambdaUtil.getQueryColumn(value), true); 298 } 299 300 /** 301 * 小于等于 {@code <=} 302 */ 303 public <T> Wrapper le(LambdaGetter<T> value, boolean isEffective) { 304 return le(LambdaUtil.getQueryColumn(value), isEffective); 305 } 306 307 /** 308 * 小于等于 {@code <=} 309 */ 310 public <T> Wrapper le(LambdaGetter<T> value, BooleanSupplier isEffective) { 311 return le(LambdaUtil.getQueryColumn(value), isEffective.getAsBoolean()); 312 } 313 314 @Override 315 public Wrapper in(Object... value) { 316 addWhereQueryCondition(queryColumn.in(value)); 317 return queryWrapper; 318 } 319 320 @Override 321 public Wrapper in(Object[] value, boolean isEffective) { 322 addWhereQueryCondition(queryColumn.in(value, isEffective)); 323 return queryWrapper; 324 } 325 326 @Override 327 public Wrapper in(Object[] value, BooleanSupplier isEffective) { 328 addWhereQueryCondition(queryColumn.in(value, isEffective)); 329 return queryWrapper; 330 } 331 332 @Override 333 public <T> Wrapper in(T[] value, Predicate<T[]> isEffective) { 334 addWhereQueryCondition(queryColumn.in(value, isEffective)); 335 return queryWrapper; 336 } 337 338 @Override 339 public Wrapper in(Collection<?> value) { 340 addWhereQueryCondition(queryColumn.in(value)); 341 return queryWrapper; 342 } 343 344 @Override 345 public Wrapper in(Collection<?> value, boolean isEffective) { 346 addWhereQueryCondition(queryColumn.in(value, isEffective)); 347 return queryWrapper; 348 } 349 350 @Override 351 public Wrapper in(Collection<?> value, BooleanSupplier isEffective) { 352 addWhereQueryCondition(queryColumn.in(value, isEffective)); 353 return queryWrapper; 354 } 355 356 @Override 357 public <T extends Collection<?>> Wrapper in(T value, Predicate<T> isEffective) { 358 addWhereQueryCondition(queryColumn.in(value, isEffective)); 359 return queryWrapper; 360 } 361 362 @Override 363 public Wrapper in(QueryWrapper queryWrapper) { 364 addWhereQueryCondition(queryColumn.in(queryWrapper)); 365 return this.queryWrapper; 366 } 367 368 @Override 369 public Wrapper in(QueryWrapper queryWrapper, boolean isEffective) { 370 addWhereQueryCondition(queryColumn.in(queryWrapper, isEffective)); 371 return this.queryWrapper; 372 } 373 374 @Override 375 public Wrapper in(QueryWrapper queryWrapper, BooleanSupplier isEffective) { 376 addWhereQueryCondition(queryColumn.in(queryWrapper, isEffective)); 377 return this.queryWrapper; 378 } 379 380 @Override 381 public Wrapper notIn(Object... value) { 382 addWhereQueryCondition(queryColumn.notIn(value)); 383 return queryWrapper; 384 } 385 386 @Override 387 public Wrapper notIn(Object[] value, boolean isEffective) { 388 addWhereQueryCondition(queryColumn.notIn(value, isEffective)); 389 return queryWrapper; 390 } 391 392 @Override 393 public Wrapper notIn(Object[] value, BooleanSupplier isEffective) { 394 addWhereQueryCondition(queryColumn.notIn(value, isEffective)); 395 return queryWrapper; 396 } 397 398 @Override 399 public <T> Wrapper notIn(T[] value, Predicate<T[]> isEffective) { 400 addWhereQueryCondition(queryColumn.notIn(value, isEffective)); 401 return queryWrapper; 402 } 403 404 @Override 405 public Wrapper notIn(Collection<?> value) { 406 addWhereQueryCondition(queryColumn.notIn(value)); 407 return queryWrapper; 408 } 409 410 @Override 411 public Wrapper notIn(Collection<?> value, boolean isEffective) { 412 addWhereQueryCondition(queryColumn.notIn(value, isEffective)); 413 return queryWrapper; 414 } 415 416 @Override 417 public Wrapper notIn(Collection<?> value, BooleanSupplier isEffective) { 418 addWhereQueryCondition(queryColumn.notIn(value, isEffective)); 419 return queryWrapper; 420 } 421 422 @Override 423 public <T extends Collection<?>> Wrapper notIn(T value, Predicate<T> isEffective) { 424 addWhereQueryCondition(queryColumn.notIn(value, isEffective)); 425 return queryWrapper; 426 } 427 428 @Override 429 public Wrapper notIn(QueryWrapper queryWrapper) { 430 addWhereQueryCondition(queryColumn.notIn(queryWrapper)); 431 return this.queryWrapper; 432 } 433 434 @Override 435 public Wrapper notIn(QueryWrapper queryWrapper, boolean isEffective) { 436 addWhereQueryCondition(queryColumn.notIn(queryWrapper, isEffective)); 437 return this.queryWrapper; 438 } 439 440 @Override 441 public Wrapper notIn(QueryWrapper queryWrapper, BooleanSupplier isEffective) { 442 addWhereQueryCondition(queryColumn.notIn(queryWrapper, isEffective)); 443 return this.queryWrapper; 444 } 445 446 @Override 447 public Wrapper between(Object[] values) { 448 addWhereQueryCondition(queryColumn.between(values)); 449 return queryWrapper; 450 } 451 452 @Override 453 public Wrapper between(Object[] values, boolean isEffective) { 454 addWhereQueryCondition(queryColumn.between(values, isEffective)); 455 return queryWrapper; 456 } 457 458 @Override 459 public Wrapper between(Object start, Object end) { 460 addWhereQueryCondition(queryColumn.between(start, end)); 461 return queryWrapper; 462 } 463 464 @Override 465 public Wrapper between(Object start, Object end, boolean isEffective) { 466 addWhereQueryCondition(queryColumn.between(start, end, isEffective)); 467 return queryWrapper; 468 } 469 470 @Override 471 public Wrapper between(Object start, Object end, BooleanSupplier isEffective) { 472 addWhereQueryCondition(queryColumn.between(start, end, isEffective)); 473 return queryWrapper; 474 } 475 476 @Override 477 public <S, E> Wrapper between(S start, E end, BiPredicate<S, E> isEffective) { 478 addWhereQueryCondition(queryColumn.between(start, end, isEffective)); 479 return queryWrapper; 480 } 481 482 @Override 483 public Wrapper notBetween(Object[] values) { 484 addWhereQueryCondition(queryColumn.notBetween(values)); 485 return queryWrapper; 486 } 487 488 @Override 489 public Wrapper notBetween(Object[] values, boolean isEffective) { 490 addWhereQueryCondition(queryColumn.notBetween(values, isEffective)); 491 return queryWrapper; 492 } 493 494 @Override 495 public Wrapper notBetween(Object start, Object end) { 496 addWhereQueryCondition(queryColumn.notBetween(start, end)); 497 return queryWrapper; 498 } 499 500 @Override 501 public Wrapper notBetween(Object start, Object end, boolean isEffective) { 502 addWhereQueryCondition(queryColumn.notBetween(start, end, isEffective)); 503 return queryWrapper; 504 } 505 506 @Override 507 public Wrapper notBetween(Object start, Object end, BooleanSupplier isEffective) { 508 addWhereQueryCondition(queryColumn.notBetween(start, end, isEffective)); 509 return queryWrapper; 510 } 511 512 @Override 513 public <S, E> Wrapper notBetween(S start, E end, BiPredicate<S, E> isEffective) { 514 addWhereQueryCondition(queryColumn.notBetween(start, end, isEffective)); 515 return queryWrapper; 516 } 517 518 @Override 519 public Wrapper like(Object value) { 520 addWhereQueryCondition(queryColumn.like(value)); 521 return queryWrapper; 522 } 523 524 @Override 525 public Wrapper like(Object value, boolean isEffective) { 526 addWhereQueryCondition(queryColumn.like(value, isEffective)); 527 return queryWrapper; 528 } 529 530 @Override 531 public Wrapper like(Object value, BooleanSupplier isEffective) { 532 addWhereQueryCondition(queryColumn.like(value, isEffective)); 533 return queryWrapper; 534 } 535 536 @Override 537 public <T> Wrapper like(T value, Predicate<T> isEffective) { 538 addWhereQueryCondition(queryColumn.like(value, isEffective)); 539 return queryWrapper; 540 } 541 542 @Override 543 public Wrapper likeLeft(Object value) { 544 addWhereQueryCondition(queryColumn.likeLeft(value)); 545 return queryWrapper; 546 } 547 548 @Override 549 public Wrapper likeLeft(Object value, boolean isEffective) { 550 addWhereQueryCondition(queryColumn.likeLeft(value, isEffective)); 551 return queryWrapper; 552 } 553 554 @Override 555 public Wrapper likeLeft(Object value, BooleanSupplier isEffective) { 556 addWhereQueryCondition(queryColumn.likeLeft(value, isEffective)); 557 return queryWrapper; 558 } 559 560 @Override 561 public <T> Wrapper likeLeft(T value, Predicate<T> isEffective) { 562 addWhereQueryCondition(queryColumn.likeLeft(value, isEffective)); 563 return queryWrapper; 564 } 565 566 @Override 567 public Wrapper likeRight(Object value) { 568 addWhereQueryCondition(queryColumn.likeRight(value)); 569 return queryWrapper; 570 } 571 572 @Override 573 public Wrapper likeRight(Object value, boolean isEffective) { 574 addWhereQueryCondition(queryColumn.likeRight(value, isEffective)); 575 return queryWrapper; 576 } 577 578 @Override 579 public Wrapper likeRight(Object value, BooleanSupplier isEffective) { 580 addWhereQueryCondition(queryColumn.likeRight(value, isEffective)); 581 return queryWrapper; 582 } 583 584 @Override 585 public <T> Wrapper likeRight(T value, Predicate<T> isEffective) { 586 addWhereQueryCondition(queryColumn.likeRight(value, isEffective)); 587 return queryWrapper; 588 } 589 590 @Override 591 public Wrapper notLike(Object value) { 592 addWhereQueryCondition(queryColumn.notLike(value)); 593 return queryWrapper; 594 } 595 596 @Override 597 public Wrapper notLike(Object value, boolean isEffective) { 598 addWhereQueryCondition(queryColumn.notLike(value, isEffective)); 599 return queryWrapper; 600 } 601 602 @Override 603 public Wrapper notLike(Object value, BooleanSupplier isEffective) { 604 addWhereQueryCondition(queryColumn.notLike(value, isEffective)); 605 return queryWrapper; 606 } 607 608 @Override 609 public <T> Wrapper notLike(T value, Predicate<T> isEffective) { 610 addWhereQueryCondition(queryColumn.notLike(value, isEffective)); 611 return queryWrapper; 612 } 613 614 @Override 615 public Wrapper notLikeLeft(Object value) { 616 addWhereQueryCondition(queryColumn.notLikeLeft(value)); 617 return queryWrapper; 618 } 619 620 @Override 621 public Wrapper notLikeLeft(Object value, boolean isEffective) { 622 addWhereQueryCondition(queryColumn.notLikeLeft(value, isEffective)); 623 return queryWrapper; 624 } 625 626 @Override 627 public Wrapper notLikeLeft(Object value, BooleanSupplier isEffective) { 628 addWhereQueryCondition(queryColumn.notLikeLeft(value, isEffective)); 629 return queryWrapper; 630 } 631 632 @Override 633 public <T> Wrapper notLikeLeft(T value, Predicate<T> isEffective) { 634 addWhereQueryCondition(queryColumn.notLikeLeft(value, isEffective)); 635 return queryWrapper; 636 } 637 638 @Override 639 public Wrapper notLikeRight(Object value) { 640 addWhereQueryCondition(queryColumn.notLikeRight(value)); 641 return queryWrapper; 642 } 643 644 @Override 645 public Wrapper notLikeRight(Object value, boolean isEffective) { 646 addWhereQueryCondition(queryColumn.notLikeRight(value, isEffective)); 647 return queryWrapper; 648 } 649 650 @Override 651 public Wrapper notLikeRight(Object value, BooleanSupplier isEffective) { 652 addWhereQueryCondition(queryColumn.notLikeRight(value, isEffective)); 653 return queryWrapper; 654 } 655 656 @Override 657 public <T> Wrapper notLikeRight(T value, Predicate<T> isEffective) { 658 addWhereQueryCondition(queryColumn.notLikeRight(value, isEffective)); 659 return queryWrapper; 660 } 661 662 @Override 663 public Wrapper isNull(boolean isEffective) { 664 addWhereQueryCondition(queryColumn.isNull(isEffective)); 665 return queryWrapper; 666 } 667 668 @Override 669 public Wrapper isNotNull(boolean isEffective) { 670 addWhereQueryCondition(queryColumn.isNotNull(isEffective)); 671 return queryWrapper; 672 } 673 674}