15
15
*/
16
16
package org .springframework .data .jdbc .repository .config ;
17
17
18
+ import static java .util .Arrays .*;
18
19
import static org .assertj .core .api .Assertions .*;
19
20
import static org .mockito .Mockito .*;
20
21
21
22
import java .util .Arrays ;
23
+ import java .util .Collection ;
22
24
import java .util .Collections ;
23
25
import java .util .List ;
24
26
import java .util .function .Consumer ;
29
31
import org .springframework .context .annotation .Bean ;
30
32
import org .springframework .context .annotation .Configuration ;
31
33
import org .springframework .core .convert .converter .Converter ;
34
+ import org .springframework .data .convert .ReadingConverter ;
32
35
import org .springframework .data .convert .WritingConverter ;
33
36
import org .springframework .data .jdbc .core .JdbcAggregateTemplate ;
34
37
import org .springframework .data .jdbc .core .convert .DataAccessStrategy ;
35
38
import org .springframework .data .jdbc .core .convert .JdbcConverter ;
36
39
import org .springframework .data .jdbc .core .convert .JdbcCustomConversions ;
40
+ import org .springframework .data .jdbc .core .convert .RelationResolver ;
37
41
import org .springframework .data .jdbc .core .mapping .JdbcMappingContext ;
38
42
import org .springframework .data .relational .core .dialect .Dialect ;
39
43
import org .springframework .data .relational .core .dialect .HsqlDbDialect ;
44
+ import org .springframework .data .relational .core .dialect .LimitClause ;
45
+ import org .springframework .data .relational .core .dialect .LockClause ;
46
+ import org .springframework .data .relational .core .sql .render .SelectRenderContext ;
40
47
import org .springframework .jdbc .core .JdbcOperations ;
41
48
import org .springframework .jdbc .core .namedparam .NamedParameterJdbcOperations ;
42
49
import org .springframework .jdbc .core .namedparam .NamedParameterJdbcTemplate ;
@@ -53,7 +60,7 @@ void configuresInfrastructureComponents() {
53
60
54
61
assertApplicationContext (context -> {
55
62
56
- List <Class <?>> expectedBeanTypes = Arrays . asList (DataAccessStrategy .class , //
63
+ List <Class <?>> expectedBeanTypes = asList (DataAccessStrategy .class , //
57
64
JdbcMappingContext .class , //
58
65
JdbcConverter .class , //
59
66
JdbcCustomConversions .class , //
@@ -106,12 +113,12 @@ static class AbstractJdbcConfigurationUnderTest extends AbstractJdbcConfiguratio
106
113
@ Override
107
114
@ Bean
108
115
public Dialect jdbcDialect (NamedParameterJdbcOperations operations ) {
109
- return HsqlDbDialect . INSTANCE ;
116
+ return new DummyDialect () ;
110
117
}
111
118
112
119
@ Override
113
- public JdbcCustomConversions jdbcCustomConversions () {
114
- return new JdbcCustomConversions ( Collections . singletonList ( Blah2BlubbConverter .INSTANCE ) );
120
+ protected List <?> userConverters () {
121
+ return asList ( Blah2BlubbConverter .INSTANCE );
115
122
}
116
123
117
124
@ WritingConverter
@@ -127,6 +134,70 @@ public Blubb convert(Blah blah) {
127
134
private static class Blah {}
128
135
129
136
private static class Blubb {}
137
+
138
+ private static class DummyDialect implements Dialect {
139
+ @ Override
140
+ public LimitClause limit () {
141
+ return null ;
142
+ }
143
+
144
+ @ Override
145
+ public LockClause lock () {
146
+ return null ;
147
+ }
148
+
149
+ @ Override
150
+ public SelectRenderContext getSelectContext () {
151
+ return null ;
152
+ }
153
+
154
+ @ Override
155
+ public Collection <Object > getConverters () {
156
+ return asList (BooleanToNumberConverter .INSTANCE );
157
+ }
158
+ }
159
+
160
+ @ WritingConverter
161
+ enum BooleanToNumberConverter implements Converter <Boolean , Number >{
162
+ INSTANCE ;
163
+
164
+ @ Override
165
+ public Number convert (Boolean source ) {
166
+ return source ? 1 : 0 ;
167
+ }
168
+ }
169
+
170
+ @ ReadingConverter
171
+ enum NumberToBooleanConverter implements Converter <Number , Boolean >{
172
+ INSTANCE ;
173
+
174
+ @ Override
175
+ public Boolean convert (Number source ) {
176
+ return source .intValue () == 0 ;
177
+ }
178
+ }
179
+
180
+
181
+ @ WritingConverter
182
+ enum BooleanToYnConverter implements Converter <Boolean , String >{
183
+ INSTANCE ;
184
+
185
+ @ Override
186
+ public String convert (Boolean source ) {
187
+ return source ? "Y" : "N" ;
188
+ }
189
+ }
190
+
191
+ @ ReadingConverter
192
+ enum StringToBooleanConverter implements Converter <String , Boolean >{
193
+ INSTANCE ;
194
+
195
+ @ Override
196
+ public Boolean convert (String source ) {
197
+ return source .equals ("Y" ) ;
198
+ }
199
+ }
200
+
130
201
}
131
202
132
203
}
0 commit comments