@@ -81,82 +81,100 @@ public TypeHandlerRegistry() {
8181 public TypeHandlerRegistry (Configuration configuration ) {
8282 this .unknownTypeHandler = new UnknownTypeHandler (configuration );
8383
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 );
111118
112119 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 );
131143
132144 register (BigInteger .class , new BigIntegerTypeHandler ());
133- register (JdbcType .BIGINT , new LongTypeHandler () );
145+ register (JdbcType .BIGINT , longTypeHandler );
134146
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 );
139152
140153 register (InputStream .class , new BlobInputStreamTypeHandler ());
141154 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 );
144158 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 );
149164
150165 register (Object .class , unknownTypeHandler );
151166 register (Object .class , JdbcType .OTHER , unknownTypeHandler );
152167 register (JdbcType .OTHER , unknownTypeHandler );
153168
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 );
160178
161179 register (java .sql .Date .class , new SqlDateTypeHandler ());
162180 register (java .sql .Time .class , new SqlTimeTypeHandler ());
@@ -177,8 +195,9 @@ public TypeHandlerRegistry(Configuration configuration) {
177195 register (JapaneseDate .class , new JapaneseDateTypeHandler ());
178196
179197 // 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 );
182201 }
183202
184203 /**
@@ -245,10 +264,10 @@ private <T> TypeHandler<T> getTypeHandler(Type type, JdbcType jdbcType) {
245264 handler = jdbcHandlerMap .get (jdbcType );
246265 if (handler == null ) {
247266 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+ }
252271 }
253272 }
254273 // type drives generics here
@@ -280,9 +299,6 @@ private Map<JdbcType, TypeHandler<?>> getJdbcHandlerMap(Type type) {
280299 private Map <JdbcType , TypeHandler <?>> getJdbcHandlerMapForEnumInterfaces (Class <?> clazz , Class <?> enumClazz ) {
281300 for (Class <?> iface : clazz .getInterfaces ()) {
282301 Map <JdbcType , TypeHandler <?>> jdbcHandlerMap = typeHandlerMap .get (iface );
283- if (jdbcHandlerMap == null ) {
284- jdbcHandlerMap = getJdbcHandlerMapForEnumInterfaces (iface , enumClazz );
285- }
286302 if (jdbcHandlerMap != null ) {
287303 // Found a type handler registered to a super interface
288304 HashMap <JdbcType , TypeHandler <?>> newMap = new HashMap <>();
@@ -292,6 +308,10 @@ private Map<JdbcType, TypeHandler<?>> getJdbcHandlerMapForEnumInterfaces(Class<?
292308 }
293309 return newMap ;
294310 }
311+ jdbcHandlerMap = getJdbcHandlerMapForEnumInterfaces (iface , enumClazz );
312+ if (jdbcHandlerMap != null ) {
313+ return jdbcHandlerMap ;
314+ }
295315 }
296316 return null ;
297317 }
@@ -345,18 +365,20 @@ public <T> void register(TypeHandler<T> typeHandler) {
345365 mappedTypeFound = true ;
346366 }
347367 }
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- }
358368 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+ }
360382 }
361383 }
362384
0 commit comments