Skip to content

Commit fe014cd

Browse files
L1ypabel533
authored andcommitted
feat: 解决typeHandler实例化参数无实际类型的问题 close #113
1 parent a1a7c82 commit fe014cd

File tree

1 file changed

+28
-21
lines changed

1 file changed

+28
-21
lines changed

mapper/src/main/java/io/mybatis/mapper/example/Example.java

+28-21
Original file line numberDiff line numberDiff line change
@@ -476,7 +476,7 @@ public Example<T> set(String setSql) {
476476
*/
477477
public Example<T> set(Fn<T, Object> fn, Object value) {
478478
EntityColumn column = fn.toEntityColumn();
479-
this.setValues.add(new Criterion(column.column(), value, column.typeHandler()));
479+
this.setValues.add(new Criterion(column.column(), value, column));
480480
return this;
481481
}
482482

@@ -545,11 +545,11 @@ protected void addCriterion(String condition, Object value) {
545545
criteria.add(new Criterion(condition, value));
546546
}
547547

548-
protected void addCriterion(String condition, Object value, Class<? extends TypeHandler> typeHandler) {
548+
protected void addCriterion(String condition, Object value, EntityColumn column) {
549549
if (value == null) {
550550
throw new RuntimeException("Value for " + condition + " cannot be null");
551551
}
552-
criteria.add(new Criterion(condition, value, typeHandler));
552+
criteria.add(new Criterion(condition, value, column));
553553
}
554554

555555
protected void addCriterion(String condition, Object value1, Object value2) {
@@ -559,11 +559,11 @@ protected void addCriterion(String condition, Object value1, Object value2) {
559559
criteria.add(new Criterion(condition, value1, value2));
560560
}
561561

562-
protected void addCriterion(String condition, Object value1, Object value2, Class<? extends TypeHandler> typeHandler) {
562+
protected void addCriterion(String condition, Object value1, Object value2, EntityColumn column) {
563563
if (value1 == null || value2 == null) {
564564
throw new RuntimeException("Between values for " + condition + " cannot be null");
565565
}
566-
criteria.add(new Criterion(condition, value1, value2, typeHandler));
566+
criteria.add(new Criterion(condition, value1, value2, column));
567567
}
568568

569569
public Criteria<T> andIsNull(boolean useCondition, Fn<T, Object> fn) {
@@ -590,7 +590,7 @@ public Criteria<T> andEqualTo(boolean useCondition, Fn<T, Object> fn, Object val
590590

591591
public Criteria<T> andEqualTo(Fn<T, Object> fn, Object value) {
592592
if (useCriterion(value)) {
593-
addCriterion(column(fn) + " =", value, typehandler(fn));
593+
addCriterion(column(fn) + " =", value, fn.toEntityColumn());
594594
}
595595
return (Criteria<T>) this;
596596
}
@@ -601,7 +601,7 @@ public Criteria<T> andNotEqualTo(boolean useCondition, Fn<T, Object> fn, Object
601601

602602
public Criteria<T> andNotEqualTo(Fn<T, Object> fn, Object value) {
603603
if (useCriterion(value)) {
604-
addCriterion(column(fn) + " <>", value, typehandler(fn));
604+
addCriterion(column(fn) + " <>", value, fn.toEntityColumn());
605605
}
606606
return (Criteria<T>) this;
607607
}
@@ -612,7 +612,7 @@ public Criteria<T> andGreaterThan(boolean useCondition, Fn<T, Object> fn, Object
612612

613613
public Criteria<T> andGreaterThan(Fn<T, Object> fn, Object value) {
614614
if (useCriterion(value)) {
615-
addCriterion(column(fn) + " >", value, typehandler(fn));
615+
addCriterion(column(fn) + " >", value, fn.toEntityColumn());
616616
}
617617
return (Criteria<T>) this;
618618
}
@@ -623,7 +623,7 @@ public Criteria<T> andGreaterThanOrEqualTo(boolean useCondition, Fn<T, Object> f
623623

624624
public Criteria<T> andGreaterThanOrEqualTo(Fn<T, Object> fn, Object value) {
625625
if (useCriterion(value)) {
626-
addCriterion(column(fn) + " >=", value, typehandler(fn));
626+
addCriterion(column(fn) + " >=", value, fn.toEntityColumn());
627627
}
628628
return (Criteria<T>) this;
629629
}
@@ -634,7 +634,7 @@ public Criteria<T> andLessThan(boolean useCondition, Fn<T, Object> fn, Object va
634634

635635
public Criteria<T> andLessThan(Fn<T, Object> fn, Object value) {
636636
if (useCriterion(value)) {
637-
addCriterion(column(fn) + " <", value, typehandler(fn));
637+
addCriterion(column(fn) + " <", value, fn.toEntityColumn());
638638
}
639639
return (Criteria<T>) this;
640640
}
@@ -645,7 +645,7 @@ public Criteria<T> andLessThanOrEqualTo(boolean useCondition, Fn<T, Object> fn,
645645

646646
public Criteria<T> andLessThanOrEqualTo(Fn<T, Object> fn, Object value) {
647647
if (useCriterion(value)) {
648-
addCriterion(column(fn) + " <=", value, typehandler(fn));
648+
addCriterion(column(fn) + " <=", value, fn.toEntityColumn());
649649
}
650650
return (Criteria<T>) this;
651651
}
@@ -657,7 +657,7 @@ public Criteria<T> andIn(boolean useCondition, Fn<T, Object> fn, Iterable values
657657
@SuppressWarnings("rawtypes")
658658
public Criteria<T> andIn(Fn<T, Object> fn, Iterable values) {
659659
if (useCriterion(values)) {
660-
addCriterion(column(fn) + " IN", values, typehandler(fn));
660+
addCriterion(column(fn) + " IN", values, fn.toEntityColumn());
661661
}
662662
return (Criteria<T>) this;
663663
}
@@ -669,7 +669,7 @@ public Criteria<T> andNotIn(boolean useCondition, Fn<T, Object> fn, Iterable val
669669
@SuppressWarnings("rawtypes")
670670
public Criteria<T> andNotIn(Fn<T, Object> fn, Iterable values) {
671671
if (useCriterion(values)) {
672-
addCriterion(column(fn) + " NOT IN", values, typehandler(fn));
672+
addCriterion(column(fn) + " NOT IN", values, fn.toEntityColumn());
673673
}
674674
return (Criteria<T>) this;
675675
}
@@ -680,7 +680,7 @@ public Criteria<T> andBetween(boolean useCondition, Fn<T, Object> fn, Object val
680680

681681
public Criteria<T> andBetween(Fn<T, Object> fn, Object value1, Object value2) {
682682
if (useCriterion(value1) && useCriterion(value2)) {
683-
addCriterion(column(fn) + " BETWEEN", value1, value2, typehandler(fn));
683+
addCriterion(column(fn) + " BETWEEN", value1, value2, fn.toEntityColumn());
684684
}
685685
return (Criteria<T>) this;
686686
}
@@ -691,7 +691,7 @@ public Criteria<T> andNotBetween(boolean useCondition, Fn<T, Object> fn, Object
691691

692692
public Criteria<T> andNotBetween(Fn<T, Object> fn, Object value1, Object value2) {
693693
if (useCriterion(value1) && useCriterion(value2)) {
694-
addCriterion(column(fn) + " NOT BETWEEN", value1, value2, typehandler(fn));
694+
addCriterion(column(fn) + " NOT BETWEEN", value1, value2, fn.toEntityColumn());
695695
}
696696
return (Criteria<T>) this;
697697
}
@@ -702,7 +702,7 @@ public Criteria<T> andLike(boolean useCondition, Fn<T, Object> fn, Object value)
702702

703703
public Criteria<T> andLike(Fn<T, Object> fn, Object value) {
704704
if (useCriterion(value)) {
705-
addCriterion(column(fn) + " LIKE", value, typehandler(fn));
705+
addCriterion(column(fn) + " LIKE", value, fn.toEntityColumn());
706706
}
707707
return (Criteria<T>) this;
708708
}
@@ -713,7 +713,7 @@ public Criteria<T> andNotLike(boolean useCondition, Fn<T, Object> fn, Object val
713713

714714
public Criteria<T> andNotLike(Fn<T, Object> fn, Object value) {
715715
if (useCriterion(value)) {
716-
addCriterion(column(fn) + " NOT LIKE", value, typehandler(fn));
716+
addCriterion(column(fn) + " NOT LIKE", value, fn.toEntityColumn());
717717
}
718718
return (Criteria<T>) this;
719719
}
@@ -1331,6 +1331,8 @@ public static class Criterion {
13311331

13321332
private Object secondValue;
13331333

1334+
private String javaType;
1335+
13341336
private String typeHandler;
13351337

13361338
private boolean noValue;
@@ -1353,11 +1355,12 @@ protected Criterion(String condition) {
13531355
this.noValue = true;
13541356
}
13551357

1356-
protected Criterion(String condition, Object value, Class<? extends TypeHandler> typeHandler) {
1358+
protected Criterion(String condition, Object value, EntityColumn column) {
13571359
super();
13581360
this.condition = condition;
13591361
this.value = value;
1360-
this.typeHandler = typeHandler != null ? typeHandler.getName() : null;
1362+
this.javaType = value != null ? column.javaType().getName() : null;
1363+
this.typeHandler = typeHandler != null ? column.typeHandler().getName() : null;
13611364
if (value instanceof Collection<?>) {
13621365
if (condition != null) {
13631366
this.listValue = true;
@@ -1369,12 +1372,13 @@ protected Criterion(String condition, Object value, Class<? extends TypeHandler>
13691372
}
13701373
}
13711374

1372-
protected Criterion(String condition, Object value, Object secondValue, Class<? extends TypeHandler> typeHandler) {
1375+
protected Criterion(String condition, Object value, Object secondValue, EntityColumn column) {
13731376
super();
13741377
this.condition = condition;
13751378
this.value = value;
13761379
this.secondValue = secondValue;
1377-
this.typeHandler = typeHandler != null ? typeHandler.getName() : null;
1380+
this.javaType = value != null ? column.javaType().getName() : null;
1381+
this.typeHandler = typeHandler != null ? column.typeHandler().getName() : null;
13781382
this.betweenValue = true;
13791383
}
13801384

@@ -1385,6 +1389,9 @@ protected Criterion(String condition, Object value, Object secondValue) {
13851389
public String variables(String field) {
13861390
StringBuilder variables = new StringBuilder();
13871391
variables.append("#{").append(field);
1392+
if (javaType != null && !javaType.isEmpty()) {
1393+
variables.append(",javaType=").append(javaType);
1394+
}
13881395
if (typeHandler != null && !typeHandler.isEmpty()) {
13891396
variables.append(",typeHandler=").append(typeHandler);
13901397
}

0 commit comments

Comments
 (0)