23
23
import java .util .stream .Collectors ;
24
24
import java .util .stream .Stream ;
25
25
26
- public abstract class AbstractListValueCondition <T > implements VisitableCondition <T > {
26
+ import org .mybatis .dynamic .sql .render .RenderedParameterInfo ;
27
+ import org .mybatis .dynamic .sql .render .RenderingContext ;
28
+ import org .mybatis .dynamic .sql .util .FragmentAndParameters ;
29
+ import org .mybatis .dynamic .sql .util .FragmentCollector ;
30
+
31
+ public abstract class AbstractListValueCondition <T > implements RenderableCondition <T > {
27
32
protected final Collection <T > values ;
28
33
29
34
protected AbstractListValueCondition (Collection <T > values ) {
@@ -39,19 +44,14 @@ public boolean isEmpty() {
39
44
return values .isEmpty ();
40
45
}
41
46
42
- @ Override
43
- public <R > R accept (ConditionVisitor <T , R > visitor ) {
44
- return visitor .visit (this );
45
- }
46
-
47
47
private <R > Collection <R > applyMapper (Function <? super T , ? extends R > mapper ) {
48
48
Objects .requireNonNull (mapper );
49
- return values . stream ().map (mapper ).collect (Collectors .toList ());
49
+ return values ().map (mapper ).collect (Collectors .toList ());
50
50
}
51
51
52
52
private Collection <T > applyFilter (Predicate <? super T > predicate ) {
53
53
Objects .requireNonNull (predicate );
54
- return values . stream ().filter (predicate ).toList ();
54
+ return values ().filter (predicate ).toList ();
55
55
}
56
56
57
57
protected <S extends AbstractListValueCondition <T >> S filterSupport (Predicate <? super T > predicate ,
@@ -84,4 +84,20 @@ protected <R, S extends AbstractListValueCondition<R>> S mapSupport(Function<? s
84
84
public abstract AbstractListValueCondition <T > filter (Predicate <? super T > predicate );
85
85
86
86
public abstract String operator ();
87
+
88
+ @ Override
89
+ public FragmentAndParameters renderCondition (RenderingContext renderingContext , BindableColumn <T > leftColumn ) {
90
+ return values ().map (v -> toFragmentAndParameters (v , renderingContext , leftColumn ))
91
+ .collect (FragmentCollector .collect ())
92
+ .toFragmentAndParameters (Collectors .joining ("," , //$NON-NLS-1$
93
+ operator () + " (" , ")" )); //$NON-NLS-1$ //$NON-NLS-2$
94
+ }
95
+
96
+ private FragmentAndParameters toFragmentAndParameters (T value , RenderingContext renderingContext ,
97
+ BindableColumn <T > leftColumn ) {
98
+ RenderedParameterInfo parameterInfo = renderingContext .calculateParameterInfo (leftColumn );
99
+ return FragmentAndParameters .withFragment (parameterInfo .renderedPlaceHolder ())
100
+ .withParameter (parameterInfo .parameterMapKey (), leftColumn .convertParameterType (value ))
101
+ .build ();
102
+ }
87
103
}
0 commit comments