@@ -81,82 +81,100 @@ public TypeHandlerRegistry() {
81
81
public TypeHandlerRegistry (Configuration configuration ) {
82
82
this .unknownTypeHandler = new UnknownTypeHandler (configuration );
83
83
84
- register (Boolean .class , new BooleanTypeHandler ());
85
- register (boolean .class , new BooleanTypeHandler ());
86
- register (JdbcType .BOOLEAN , new BooleanTypeHandler ());
87
- register (JdbcType .BIT , new BooleanTypeHandler ());
88
-
89
- register (Byte .class , new ByteTypeHandler ());
90
- register (byte .class , new ByteTypeHandler ());
91
- register (JdbcType .TINYINT , new ByteTypeHandler ());
92
-
93
- register (Short .class , new ShortTypeHandler ());
94
- register (short .class , new ShortTypeHandler ());
95
- register (JdbcType .SMALLINT , new ShortTypeHandler ());
96
-
97
- register (Integer .class , new IntegerTypeHandler ());
98
- register (int .class , new IntegerTypeHandler ());
99
- register (JdbcType .INTEGER , new IntegerTypeHandler ());
100
-
101
- register (Long .class , new LongTypeHandler ());
102
- register (long .class , new LongTypeHandler ());
103
-
104
- register (Float .class , new FloatTypeHandler ());
105
- register (float .class , new FloatTypeHandler ());
106
- register (JdbcType .FLOAT , new FloatTypeHandler ());
107
-
108
- register (Double .class , new DoubleTypeHandler ());
109
- register (double .class , new DoubleTypeHandler ());
110
- register (JdbcType .DOUBLE , new DoubleTypeHandler ());
84
+ BooleanTypeHandler booleanTypeHandler = new BooleanTypeHandler ();
85
+ register (Boolean .class , booleanTypeHandler );
86
+ register (boolean .class , booleanTypeHandler );
87
+ register (JdbcType .BOOLEAN , booleanTypeHandler );
88
+ register (JdbcType .BIT , booleanTypeHandler );
89
+
90
+ ByteTypeHandler byteTypeHandler = new ByteTypeHandler ();
91
+ register (Byte .class , byteTypeHandler );
92
+ register (byte .class , byteTypeHandler );
93
+ register (JdbcType .TINYINT , byteTypeHandler );
94
+
95
+ ShortTypeHandler shortTypeHandler = new ShortTypeHandler ();
96
+ register (Short .class , shortTypeHandler );
97
+ register (short .class , shortTypeHandler );
98
+ register (JdbcType .SMALLINT , shortTypeHandler );
99
+
100
+ IntegerTypeHandler integerTypeHandler = new IntegerTypeHandler ();
101
+ register (Integer .class , integerTypeHandler );
102
+ register (int .class , integerTypeHandler );
103
+ register (JdbcType .INTEGER , integerTypeHandler );
104
+
105
+ LongTypeHandler longTypeHandler = new LongTypeHandler ();
106
+ register (Long .class , longTypeHandler );
107
+ register (long .class , longTypeHandler );
108
+
109
+ FloatTypeHandler floatTypeHandler = new FloatTypeHandler ();
110
+ register (Float .class , floatTypeHandler );
111
+ register (float .class , floatTypeHandler );
112
+ register (JdbcType .FLOAT , floatTypeHandler );
113
+
114
+ DoubleTypeHandler doubleTypeHandler = new DoubleTypeHandler ();
115
+ register (Double .class , doubleTypeHandler );
116
+ register (double .class , doubleTypeHandler );
117
+ register (JdbcType .DOUBLE , doubleTypeHandler );
111
118
112
119
register (Reader .class , new ClobReaderTypeHandler ());
113
- register (String .class , new StringTypeHandler ());
114
- register (String .class , JdbcType .CHAR , new StringTypeHandler ());
115
- register (String .class , JdbcType .CLOB , new ClobTypeHandler ());
116
- register (String .class , JdbcType .VARCHAR , new StringTypeHandler ());
117
- register (String .class , JdbcType .LONGVARCHAR , new StringTypeHandler ());
118
- register (String .class , JdbcType .NVARCHAR , new NStringTypeHandler ());
119
- register (String .class , JdbcType .NCHAR , new NStringTypeHandler ());
120
- register (String .class , JdbcType .NCLOB , new NClobTypeHandler ());
121
- register (JdbcType .CHAR , new StringTypeHandler ());
122
- register (JdbcType .VARCHAR , new StringTypeHandler ());
123
- register (JdbcType .CLOB , new ClobTypeHandler ());
124
- register (JdbcType .LONGVARCHAR , new StringTypeHandler ());
125
- register (JdbcType .NVARCHAR , new NStringTypeHandler ());
126
- register (JdbcType .NCHAR , new NStringTypeHandler ());
127
- register (JdbcType .NCLOB , new NClobTypeHandler ());
128
-
129
- register (Object .class , JdbcType .ARRAY , new ArrayTypeHandler ());
130
- register (JdbcType .ARRAY , new ArrayTypeHandler ());
120
+ StringTypeHandler stringTypeHandler = new StringTypeHandler ();
121
+ register (String .class , stringTypeHandler );
122
+ register (String .class , JdbcType .CHAR , stringTypeHandler );
123
+ ClobTypeHandler clobTypeHandler = new ClobTypeHandler ();
124
+ register (String .class , JdbcType .CLOB , clobTypeHandler );
125
+ register (String .class , JdbcType .VARCHAR , stringTypeHandler );
126
+ register (String .class , JdbcType .LONGVARCHAR , stringTypeHandler );
127
+ NStringTypeHandler nStringTypeHandler = new NStringTypeHandler ();
128
+ register (String .class , JdbcType .NVARCHAR , nStringTypeHandler );
129
+ register (String .class , JdbcType .NCHAR , nStringTypeHandler );
130
+ NClobTypeHandler nClobTypeHandler = new NClobTypeHandler ();
131
+ register (String .class , JdbcType .NCLOB , nClobTypeHandler );
132
+ register (JdbcType .CHAR , stringTypeHandler );
133
+ register (JdbcType .VARCHAR , stringTypeHandler );
134
+ register (JdbcType .CLOB , clobTypeHandler );
135
+ register (JdbcType .LONGVARCHAR , stringTypeHandler );
136
+ register (JdbcType .NVARCHAR , nStringTypeHandler );
137
+ register (JdbcType .NCHAR , nStringTypeHandler );
138
+ register (JdbcType .NCLOB , nClobTypeHandler );
139
+
140
+ ArrayTypeHandler arrayTypeHandler = new ArrayTypeHandler ();
141
+ register (Object .class , JdbcType .ARRAY , arrayTypeHandler );
142
+ register (JdbcType .ARRAY , arrayTypeHandler );
131
143
132
144
register (BigInteger .class , new BigIntegerTypeHandler ());
133
- register (JdbcType .BIGINT , new LongTypeHandler () );
145
+ register (JdbcType .BIGINT , longTypeHandler );
134
146
135
- register (BigDecimal .class , new BigDecimalTypeHandler ());
136
- register (JdbcType .REAL , new BigDecimalTypeHandler ());
137
- register (JdbcType .DECIMAL , new BigDecimalTypeHandler ());
138
- register (JdbcType .NUMERIC , new BigDecimalTypeHandler ());
147
+ BigDecimalTypeHandler bigDecimalTypeHandler = new BigDecimalTypeHandler ();
148
+ register (BigDecimal .class , bigDecimalTypeHandler );
149
+ register (JdbcType .REAL , bigDecimalTypeHandler );
150
+ register (JdbcType .DECIMAL , bigDecimalTypeHandler );
151
+ register (JdbcType .NUMERIC , bigDecimalTypeHandler );
139
152
140
153
register (InputStream .class , new BlobInputStreamTypeHandler ());
141
154
register (Byte [].class , new ByteObjectArrayTypeHandler ());
142
- register (Byte [].class , JdbcType .BLOB , new BlobByteObjectArrayTypeHandler ());
143
- register (Byte [].class , JdbcType .LONGVARBINARY , new BlobByteObjectArrayTypeHandler ());
155
+ BlobByteObjectArrayTypeHandler blobByteObjectArrayTypeHandler = new BlobByteObjectArrayTypeHandler ();
156
+ register (Byte [].class , JdbcType .BLOB , blobByteObjectArrayTypeHandler );
157
+ register (Byte [].class , JdbcType .LONGVARBINARY , blobByteObjectArrayTypeHandler );
144
158
register (byte [].class , new ByteArrayTypeHandler ());
145
- register (byte [].class , JdbcType .BLOB , new BlobTypeHandler ());
146
- register (byte [].class , JdbcType .LONGVARBINARY , new BlobTypeHandler ());
147
- register (JdbcType .LONGVARBINARY , new BlobTypeHandler ());
148
- register (JdbcType .BLOB , new BlobTypeHandler ());
159
+ BlobTypeHandler blobTypeHandler = new BlobTypeHandler ();
160
+ register (byte [].class , JdbcType .BLOB , blobTypeHandler );
161
+ register (byte [].class , JdbcType .LONGVARBINARY , blobTypeHandler );
162
+ register (JdbcType .LONGVARBINARY , blobTypeHandler );
163
+ register (JdbcType .BLOB , blobTypeHandler );
149
164
150
165
register (Object .class , unknownTypeHandler );
151
166
register (Object .class , JdbcType .OTHER , unknownTypeHandler );
152
167
register (JdbcType .OTHER , unknownTypeHandler );
153
168
154
- register (Date .class , new DateTypeHandler ());
155
- register (Date .class , JdbcType .DATE , new DateOnlyTypeHandler ());
156
- register (Date .class , JdbcType .TIME , new TimeOnlyTypeHandler ());
157
- register (JdbcType .TIMESTAMP , new DateTypeHandler ());
158
- register (JdbcType .DATE , new DateOnlyTypeHandler ());
159
- register (JdbcType .TIME , new TimeOnlyTypeHandler ());
169
+ DateTypeHandler dateTypeHandler = new DateTypeHandler ();
170
+ register (Date .class , dateTypeHandler );
171
+ DateOnlyTypeHandler dateOnlyTypeHandler = new DateOnlyTypeHandler ();
172
+ register (Date .class , JdbcType .DATE , dateOnlyTypeHandler );
173
+ TimeOnlyTypeHandler timeOnlyTypeHandler = new TimeOnlyTypeHandler ();
174
+ register (Date .class , JdbcType .TIME , timeOnlyTypeHandler );
175
+ register (JdbcType .TIMESTAMP , dateTypeHandler );
176
+ register (JdbcType .DATE , dateOnlyTypeHandler );
177
+ register (JdbcType .TIME , timeOnlyTypeHandler );
160
178
161
179
register (java .sql .Date .class , new SqlDateTypeHandler ());
162
180
register (java .sql .Time .class , new SqlTimeTypeHandler ());
@@ -177,8 +195,9 @@ public TypeHandlerRegistry(Configuration configuration) {
177
195
register (JapaneseDate .class , new JapaneseDateTypeHandler ());
178
196
179
197
// issue #273
180
- register (Character .class , new CharacterTypeHandler ());
181
- register (char .class , new CharacterTypeHandler ());
198
+ CharacterTypeHandler characterTypeHandler = new CharacterTypeHandler ();
199
+ register (Character .class , characterTypeHandler );
200
+ register (char .class , characterTypeHandler );
182
201
}
183
202
184
203
/**
@@ -245,10 +264,10 @@ private <T> TypeHandler<T> getTypeHandler(Type type, JdbcType jdbcType) {
245
264
handler = jdbcHandlerMap .get (jdbcType );
246
265
if (handler == null ) {
247
266
handler = jdbcHandlerMap .get (null );
248
- }
249
- if ( handler == null ) {
250
- // #591
251
- handler = pickSoleHandler ( jdbcHandlerMap );
267
+ if ( handler == null ) {
268
+ // #591
269
+ handler = pickSoleHandler ( jdbcHandlerMap );
270
+ }
252
271
}
253
272
}
254
273
// type drives generics here
@@ -280,9 +299,6 @@ private Map<JdbcType, TypeHandler<?>> getJdbcHandlerMap(Type type) {
280
299
private Map <JdbcType , TypeHandler <?>> getJdbcHandlerMapForEnumInterfaces (Class <?> clazz , Class <?> enumClazz ) {
281
300
for (Class <?> iface : clazz .getInterfaces ()) {
282
301
Map <JdbcType , TypeHandler <?>> jdbcHandlerMap = typeHandlerMap .get (iface );
283
- if (jdbcHandlerMap == null ) {
284
- jdbcHandlerMap = getJdbcHandlerMapForEnumInterfaces (iface , enumClazz );
285
- }
286
302
if (jdbcHandlerMap != null ) {
287
303
// Found a type handler registered to a super interface
288
304
HashMap <JdbcType , TypeHandler <?>> newMap = new HashMap <>();
@@ -292,6 +308,10 @@ private Map<JdbcType, TypeHandler<?>> getJdbcHandlerMapForEnumInterfaces(Class<?
292
308
}
293
309
return newMap ;
294
310
}
311
+ jdbcHandlerMap = getJdbcHandlerMapForEnumInterfaces (iface , enumClazz );
312
+ if (jdbcHandlerMap != null ) {
313
+ return jdbcHandlerMap ;
314
+ }
295
315
}
296
316
return null ;
297
317
}
@@ -345,18 +365,20 @@ public <T> void register(TypeHandler<T> typeHandler) {
345
365
mappedTypeFound = true ;
346
366
}
347
367
}
348
- // @since 3.1.0 - try to auto-discover the mapped type
349
- if (!mappedTypeFound && typeHandler instanceof TypeReference ) {
350
- try {
351
- TypeReference <T > typeReference = (TypeReference <T >) typeHandler ;
352
- register (typeReference .getRawType (), typeHandler );
353
- mappedTypeFound = true ;
354
- } catch (Throwable t ) {
355
- // maybe users define the TypeReference with a different type and are not assignable, so just ignore it
356
- }
357
- }
358
368
if (!mappedTypeFound ) {
359
- register ((Class <T >) null , typeHandler );
369
+ // @since 3.1.0 - try to auto-discover the mapped type
370
+ if (typeHandler instanceof TypeReference ) {
371
+ try {
372
+ TypeReference <T > typeReference = (TypeReference <T >) typeHandler ;
373
+ register (typeReference .getRawType (), typeHandler );
374
+ mappedTypeFound = true ;
375
+ } catch (Throwable t ) {
376
+ // maybe users define the TypeReference with a different type and are not assignable, so just ignore it
377
+ }
378
+ }
379
+ if (!mappedTypeFound ) {
380
+ register ((Class <T >) null , typeHandler );
381
+ }
360
382
}
361
383
}
362
384
0 commit comments