diff --git a/src/main/java/org/apache/ibatis/builder/xml/XMLConfigBuilder.java b/src/main/java/org/apache/ibatis/builder/xml/XMLConfigBuilder.java index 46dcaa66eea..7b431b9c1db 100644 --- a/src/main/java/org/apache/ibatis/builder/xml/XMLConfigBuilder.java +++ b/src/main/java/org/apache/ibatis/builder/xml/XMLConfigBuilder.java @@ -1,5 +1,5 @@ /** - * Copyright 2009-2016 the original author or authors. + * Copyright 2009-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -45,6 +45,7 @@ import org.apache.ibatis.session.LocalCacheScope; import org.apache.ibatis.transaction.TransactionFactory; import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.TypeHandler; /** * @author Clinton Begin @@ -254,6 +255,9 @@ private void settingsElement(Properties props) throws Exception { configuration.setLazyLoadTriggerMethods(stringSetValueOf(props.getProperty("lazyLoadTriggerMethods"), "equals,clone,hashCode,toString")); configuration.setSafeResultHandlerEnabled(booleanValueOf(props.getProperty("safeResultHandlerEnabled"), true)); configuration.setDefaultScriptingLanguage(resolveClass(props.getProperty("defaultScriptingLanguage"))); + @SuppressWarnings("unchecked") + Class typeHandler = (Class)resolveClass(props.getProperty("defaultEnumTypeHandler")); + configuration.setDefaultEnumTypeHandler(typeHandler); configuration.setCallSettersOnNulls(booleanValueOf(props.getProperty("callSettersOnNulls"), false)); configuration.setUseActualParamName(booleanValueOf(props.getProperty("useActualParamName"), true)); configuration.setReturnInstanceForEmptyRow(booleanValueOf(props.getProperty("returnInstanceForEmptyRow"), false)); diff --git a/src/main/java/org/apache/ibatis/session/Configuration.java b/src/main/java/org/apache/ibatis/session/Configuration.java index ea1f6f46706..f2a60fe03f7 100644 --- a/src/main/java/org/apache/ibatis/session/Configuration.java +++ b/src/main/java/org/apache/ibatis/session/Configuration.java @@ -1,5 +1,5 @@ /** - * Copyright 2009-2016 the original author or authors. + * Copyright 2009-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -88,6 +88,7 @@ import org.apache.ibatis.transaction.managed.ManagedTransactionFactory; import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.TypeAliasRegistry; +import org.apache.ibatis.type.TypeHandler; import org.apache.ibatis.type.TypeHandlerRegistry; /** @@ -461,6 +462,18 @@ public TypeHandlerRegistry getTypeHandlerRegistry() { return typeHandlerRegistry; } + /** + * Set a default {@link TypeHandler} class for {@link Enum}. + * A default {@link TypeHandler} is {@link org.apache.ibatis.type.EnumTypeHandler}. + * @param typeHandler a type handler class for {@link Enum} + * @since 3.4.5 + */ + public void setDefaultEnumTypeHandler(Class typeHandler) { + if (typeHandler != null) { + getTypeHandlerRegistry().setDefaultEnumTypeHandler(typeHandler); + } + } + public TypeAliasRegistry getTypeAliasRegistry() { return typeAliasRegistry; } diff --git a/src/main/java/org/apache/ibatis/type/TypeHandlerRegistry.java b/src/main/java/org/apache/ibatis/type/TypeHandlerRegistry.java index 425d242a65f..1beee8bf11d 100644 --- a/src/main/java/org/apache/ibatis/type/TypeHandlerRegistry.java +++ b/src/main/java/org/apache/ibatis/type/TypeHandlerRegistry.java @@ -47,6 +47,8 @@ public final class TypeHandlerRegistry { private static final Map> NULL_TYPE_HANDLER_MAP = new HashMap>(); + private Class defaultEnumTypeHandler = EnumTypeHandler.class; + public TypeHandlerRegistry() { register(Boolean.class, new BooleanTypeHandler()); register(boolean.class, new BooleanTypeHandler()); @@ -155,6 +157,16 @@ public TypeHandlerRegistry() { register(char.class, new CharacterTypeHandler()); } + /** + * Set a default {@link TypeHandler} class for {@link Enum}. + * A default {@link TypeHandler} is {@link org.apache.ibatis.type.EnumTypeHandler}. + * @param typeHandler a type handler class for {@link Enum} + * @since 3.4.5 + */ + public void setDefaultEnumTypeHandler(Class typeHandler) { + this.defaultEnumTypeHandler = typeHandler; + } + public boolean hasTypeHandler(Class javaType) { return hasTypeHandler(javaType, null); } @@ -224,7 +236,7 @@ private Map> getJdbcHandlerMap(Type type) { if (clazz.isEnum()) { jdbcHandlerMap = getJdbcHandlerMapForEnumInterfaces(clazz); if (jdbcHandlerMap == null) { - register(clazz, new EnumTypeHandler(clazz)); + register(clazz, getInstance(clazz, defaultEnumTypeHandler)); return TYPE_HANDLER_MAP.get(clazz); } } else { diff --git a/src/site/es/xdoc/configuration.xml b/src/site/es/xdoc/configuration.xml index 72f047ffebb..7283356714c 100644 --- a/src/site/es/xdoc/configuration.xml +++ b/src/site/es/xdoc/configuration.xml @@ -401,6 +401,20 @@ SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environ org.apache.ibatis.scripting.xmltags.XMLLanguageDriver + + + defaultEnumTypeHandler + + + Specifies the TypeHandler used by default for Enum. (Since: 3.4.5) + + + A type alias or fully qualified class name. + + + org.apache.ibatis.type.EnumTypeHandler + + callSettersOnNulls diff --git a/src/site/ja/xdoc/configuration.xml b/src/site/ja/xdoc/configuration.xml index d7433ba1f9b..50f45678a8c 100644 --- a/src/site/ja/xdoc/configuration.xml +++ b/src/site/ja/xdoc/configuration.xml @@ -429,6 +429,20 @@ SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environ org.apache.ibatis.scripting.xmltags.XMLLanguageDriver + + + defaultEnumTypeHandler + + + Enum型に適用するデフォルトの TypeHandler を指定します。(導入されたバージョン: 3.4.5) + + + タイプエイリアスまたは完全修飾クラス名 + + + org.apache.ibatis.type.EnumTypeHandler + + callSettersOnNulls diff --git a/src/site/ko/xdoc/configuration.xml b/src/site/ko/xdoc/configuration.xml index 88cb107331f..586be60a108 100644 --- a/src/site/ko/xdoc/configuration.xml +++ b/src/site/ko/xdoc/configuration.xml @@ -409,6 +409,20 @@ SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environ org.apache.ibatis.scripting.xmltags.XMLLanguageDriver + + + defaultEnumTypeHandler + + + Specifies the TypeHandler used by default for Enum. (Since: 3.4.5) + + + A type alias or fully qualified class name. + + + org.apache.ibatis.type.EnumTypeHandler + + callSettersOnNulls diff --git a/src/site/xdoc/configuration.xml b/src/site/xdoc/configuration.xml index e15dfb2fff1..722dcfd98d2 100644 --- a/src/site/xdoc/configuration.xml +++ b/src/site/xdoc/configuration.xml @@ -487,6 +487,20 @@ SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environ org.apache.ibatis.scripting.xmltags.XMLLanguageDriver + + + defaultEnumTypeHandler + + + Specifies the TypeHandler used by default for Enum. (Since: 3.4.5) + + + A type alias or fully qualified class name. + + + org.apache.ibatis.type.EnumTypeHandler + + callSettersOnNulls diff --git a/src/site/zh/xdoc/configuration.xml b/src/site/zh/xdoc/configuration.xml index 4e7f180ea32..ae9bb398bd4 100644 --- a/src/site/zh/xdoc/configuration.xml +++ b/src/site/zh/xdoc/configuration.xml @@ -411,6 +411,20 @@ SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environ org.apache.ibatis.scripting.xmltags.XMLLanguageDriver + + + defaultEnumTypeHandler + + + Specifies the TypeHandler used by default for Enum. (Since: 3.4.5) + + + A type alias or fully qualified class name. + + + org.apache.ibatis.type.EnumTypeHandler + + callSettersOnNulls diff --git a/src/test/java/org/apache/ibatis/builder/CustomizedSettingsMapperConfig.xml b/src/test/java/org/apache/ibatis/builder/CustomizedSettingsMapperConfig.xml index 96670484e2e..fd7bcd59f80 100644 --- a/src/test/java/org/apache/ibatis/builder/CustomizedSettingsMapperConfig.xml +++ b/src/test/java/org/apache/ibatis/builder/CustomizedSettingsMapperConfig.xml @@ -1,7 +1,7 @@