20
20
import io .mybatis .mapper .fn .Fn ;
21
21
import io .mybatis .provider .EntityColumn ;
22
22
import io .mybatis .provider .EntityTable ;
23
+ import org .apache .ibatis .type .TypeHandler ;
23
24
24
25
import java .util .*;
25
26
import java .util .function .Supplier ;
@@ -474,7 +475,8 @@ public Example<T> set(String setSql) {
474
475
* @param value 值
475
476
*/
476
477
public Example <T > set (Fn <T , Object > fn , Object value ) {
477
- this .setValues .add (new Criterion (fn .toColumn (), value ));
478
+ EntityColumn column = fn .toEntityColumn ();
479
+ this .setValues .add (new Criterion (column .column (), value , column .typeHandler ()));
478
480
return this ;
479
481
}
480
482
@@ -511,6 +513,10 @@ private String column(Fn<T, Object> fn) {
511
513
return fn .toColumn ();
512
514
}
513
515
516
+ private Class <? extends TypeHandler > typehandler (Fn <T , Object > fn ) {
517
+ return fn .toEntityColumn ().typeHandler ();
518
+ }
519
+
514
520
/**
515
521
* 是否使用该条件
516
522
* <br/>
@@ -539,13 +545,27 @@ protected void addCriterion(String condition, Object value) {
539
545
criteria .add (new Criterion (condition , value ));
540
546
}
541
547
548
+ protected void addCriterion (String condition , Object value , Class <? extends TypeHandler > typeHandler ) {
549
+ if (value == null ) {
550
+ throw new RuntimeException ("Value for " + condition + " cannot be null" );
551
+ }
552
+ criteria .add (new Criterion (condition , value , typeHandler ));
553
+ }
554
+
542
555
protected void addCriterion (String condition , Object value1 , Object value2 ) {
543
556
if (value1 == null || value2 == null ) {
544
557
throw new RuntimeException ("Between values for " + condition + " cannot be null" );
545
558
}
546
559
criteria .add (new Criterion (condition , value1 , value2 ));
547
560
}
548
561
562
+ protected void addCriterion (String condition , Object value1 , Object value2 , Class <? extends TypeHandler > typeHandler ) {
563
+ if (value1 == null || value2 == null ) {
564
+ throw new RuntimeException ("Between values for " + condition + " cannot be null" );
565
+ }
566
+ criteria .add (new Criterion (condition , value1 , value2 , typeHandler ));
567
+ }
568
+
549
569
public Criteria <T > andIsNull (boolean useCondition , Fn <T , Object > fn ) {
550
570
return useCondition ? andIsNull (fn ) : (Criteria <T >) this ;
551
571
}
@@ -570,7 +590,7 @@ public Criteria<T> andEqualTo(boolean useCondition, Fn<T, Object> fn, Object val
570
590
571
591
public Criteria <T > andEqualTo (Fn <T , Object > fn , Object value ) {
572
592
if (useCriterion (value )) {
573
- addCriterion (column (fn ) + " =" , value );
593
+ addCriterion (column (fn ) + " =" , value , typehandler ( fn ) );
574
594
}
575
595
return (Criteria <T >) this ;
576
596
}
@@ -581,7 +601,7 @@ public Criteria<T> andNotEqualTo(boolean useCondition, Fn<T, Object> fn, Object
581
601
582
602
public Criteria <T > andNotEqualTo (Fn <T , Object > fn , Object value ) {
583
603
if (useCriterion (value )) {
584
- addCriterion (column (fn ) + " <>" , value );
604
+ addCriterion (column (fn ) + " <>" , value , typehandler ( fn ) );
585
605
}
586
606
return (Criteria <T >) this ;
587
607
}
@@ -592,7 +612,7 @@ public Criteria<T> andGreaterThan(boolean useCondition, Fn<T, Object> fn, Object
592
612
593
613
public Criteria <T > andGreaterThan (Fn <T , Object > fn , Object value ) {
594
614
if (useCriterion (value )) {
595
- addCriterion (column (fn ) + " >" , value );
615
+ addCriterion (column (fn ) + " >" , value , typehandler ( fn ) );
596
616
}
597
617
return (Criteria <T >) this ;
598
618
}
@@ -603,7 +623,7 @@ public Criteria<T> andGreaterThanOrEqualTo(boolean useCondition, Fn<T, Object> f
603
623
604
624
public Criteria <T > andGreaterThanOrEqualTo (Fn <T , Object > fn , Object value ) {
605
625
if (useCriterion (value )) {
606
- addCriterion (column (fn ) + " >=" , value );
626
+ addCriterion (column (fn ) + " >=" , value , typehandler ( fn ) );
607
627
}
608
628
return (Criteria <T >) this ;
609
629
}
@@ -614,7 +634,7 @@ public Criteria<T> andLessThan(boolean useCondition, Fn<T, Object> fn, Object va
614
634
615
635
public Criteria <T > andLessThan (Fn <T , Object > fn , Object value ) {
616
636
if (useCriterion (value )) {
617
- addCriterion (column (fn ) + " <" , value );
637
+ addCriterion (column (fn ) + " <" , value , typehandler ( fn ) );
618
638
}
619
639
return (Criteria <T >) this ;
620
640
}
@@ -625,7 +645,7 @@ public Criteria<T> andLessThanOrEqualTo(boolean useCondition, Fn<T, Object> fn,
625
645
626
646
public Criteria <T > andLessThanOrEqualTo (Fn <T , Object > fn , Object value ) {
627
647
if (useCriterion (value )) {
628
- addCriterion (column (fn ) + " <=" , value );
648
+ addCriterion (column (fn ) + " <=" , value , typehandler ( fn ) );
629
649
}
630
650
return (Criteria <T >) this ;
631
651
}
@@ -637,7 +657,7 @@ public Criteria<T> andIn(boolean useCondition, Fn<T, Object> fn, Iterable values
637
657
@ SuppressWarnings ("rawtypes" )
638
658
public Criteria <T > andIn (Fn <T , Object > fn , Iterable values ) {
639
659
if (useCriterion (values )) {
640
- addCriterion (column (fn ) + " IN" , values );
660
+ addCriterion (column (fn ) + " IN" , values , typehandler ( fn ) );
641
661
}
642
662
return (Criteria <T >) this ;
643
663
}
@@ -649,7 +669,7 @@ public Criteria<T> andNotIn(boolean useCondition, Fn<T, Object> fn, Iterable val
649
669
@ SuppressWarnings ("rawtypes" )
650
670
public Criteria <T > andNotIn (Fn <T , Object > fn , Iterable values ) {
651
671
if (useCriterion (values )) {
652
- addCriterion (column (fn ) + " NOT IN" , values );
672
+ addCriterion (column (fn ) + " NOT IN" , values , typehandler ( fn ) );
653
673
}
654
674
return (Criteria <T >) this ;
655
675
}
@@ -660,7 +680,7 @@ public Criteria<T> andBetween(boolean useCondition, Fn<T, Object> fn, Object val
660
680
661
681
public Criteria <T > andBetween (Fn <T , Object > fn , Object value1 , Object value2 ) {
662
682
if (useCriterion (value1 ) && useCriterion (value2 )) {
663
- addCriterion (column (fn ) + " BETWEEN" , value1 , value2 );
683
+ addCriterion (column (fn ) + " BETWEEN" , value1 , value2 , typehandler ( fn ) );
664
684
}
665
685
return (Criteria <T >) this ;
666
686
}
@@ -671,29 +691,29 @@ public Criteria<T> andNotBetween(boolean useCondition, Fn<T, Object> fn, Object
671
691
672
692
public Criteria <T > andNotBetween (Fn <T , Object > fn , Object value1 , Object value2 ) {
673
693
if (useCriterion (value1 ) && useCriterion (value2 )) {
674
- addCriterion (column (fn ) + " NOT BETWEEN" , value1 , value2 );
694
+ addCriterion (column (fn ) + " NOT BETWEEN" , value1 , value2 , typehandler ( fn ) );
675
695
}
676
696
return (Criteria <T >) this ;
677
697
}
678
698
679
- public Criteria <T > andLike (boolean useCondition , Fn <T , Object > fn , String value ) {
699
+ public Criteria <T > andLike (boolean useCondition , Fn <T , Object > fn , Object value ) {
680
700
return useCondition ? andLike (fn , value ) : (Criteria <T >) this ;
681
701
}
682
702
683
- public Criteria <T > andLike (Fn <T , Object > fn , String value ) {
703
+ public Criteria <T > andLike (Fn <T , Object > fn , Object value ) {
684
704
if (useCriterion (value )) {
685
- addCriterion (column (fn ) + " LIKE" , value );
705
+ addCriterion (column (fn ) + " LIKE" , value , typehandler ( fn ) );
686
706
}
687
707
return (Criteria <T >) this ;
688
708
}
689
709
690
- public Criteria <T > andNotLike (boolean useCondition , Fn <T , Object > fn , String value ) {
710
+ public Criteria <T > andNotLike (boolean useCondition , Fn <T , Object > fn , Object value ) {
691
711
return useCondition ? andNotLike (fn , value ) : (Criteria <T >) this ;
692
712
}
693
713
694
- public Criteria <T > andNotLike (Fn <T , Object > fn , String value ) {
714
+ public Criteria <T > andNotLike (Fn <T , Object > fn , Object value ) {
695
715
if (useCriterion (value )) {
696
- addCriterion (column (fn ) + " NOT LIKE" , value );
716
+ addCriterion (column (fn ) + " NOT LIKE" , value , typehandler ( fn ) );
697
717
}
698
718
return (Criteria <T >) this ;
699
719
}
@@ -857,13 +877,13 @@ public OrCriteria<T> andNotBetween(Fn<T, Object> fn, Object value1, Object value
857
877
}
858
878
859
879
@ Override
860
- public OrCriteria <T > andLike (Fn <T , Object > fn , String value ) {
880
+ public OrCriteria <T > andLike (Fn <T , Object > fn , Object value ) {
861
881
super .andLike (fn , value );
862
882
return this ;
863
883
}
864
884
865
885
@ Override
866
- public OrCriteria <T > andNotLike (Fn <T , Object > fn , String value ) {
886
+ public OrCriteria <T > andNotLike (Fn <T , Object > fn , Object value ) {
867
887
super .andNotLike (fn , value );
868
888
return this ;
869
889
}
@@ -1311,6 +1331,8 @@ public static class Criterion {
1311
1331
1312
1332
private Object secondValue ;
1313
1333
1334
+ private String typeHandler ;
1335
+
1314
1336
private boolean noValue ;
1315
1337
1316
1338
private boolean singleValue ;
@@ -1331,10 +1353,11 @@ protected Criterion(String condition) {
1331
1353
this .noValue = true ;
1332
1354
}
1333
1355
1334
- protected Criterion (String condition , Object value , String typeHandler ) {
1356
+ protected Criterion (String condition , Object value , Class <? extends TypeHandler > typeHandler ) {
1335
1357
super ();
1336
1358
this .condition = condition ;
1337
1359
this .value = value ;
1360
+ this .typeHandler = typeHandler != null ? typeHandler .getName () : null ;
1338
1361
if (value instanceof Collection <?>) {
1339
1362
if (condition != null ) {
1340
1363
this .listValue = true ;
@@ -1346,18 +1369,32 @@ protected Criterion(String condition, Object value, String typeHandler) {
1346
1369
}
1347
1370
}
1348
1371
1349
- protected Criterion (String condition , Object value , Object secondValue , String typeHandler ) {
1372
+ protected Criterion (String condition , Object value , Object secondValue , Class <? extends TypeHandler > typeHandler ) {
1350
1373
super ();
1351
1374
this .condition = condition ;
1352
1375
this .value = value ;
1353
1376
this .secondValue = secondValue ;
1377
+ this .typeHandler = typeHandler != null ? typeHandler .getName () : null ;
1354
1378
this .betweenValue = true ;
1355
1379
}
1356
1380
1357
1381
protected Criterion (String condition , Object value , Object secondValue ) {
1358
1382
this (condition , value , secondValue , null );
1359
1383
}
1360
1384
1385
+ public String variables (String prefix , String field ) {
1386
+ StringBuilder variables = new StringBuilder ();
1387
+ variables .append ("#{" );
1388
+ if (prefix != null && !prefix .isEmpty ()) {
1389
+ variables .append (prefix ).append ("." );
1390
+ }
1391
+ variables .append (field );
1392
+ if (typeHandler != null && !typeHandler .isEmpty ()) {
1393
+ variables .append (",typeHandler=" ).append (typeHandler );
1394
+ }
1395
+ return variables .append ("}" ).toString ();
1396
+ }
1397
+
1361
1398
public String getCondition () {
1362
1399
return condition ;
1363
1400
}
0 commit comments