瀏覽代碼

通用枚举处理ok

hubin 7 年之前
父節點
當前提交
5ac79e12b6

+ 8 - 4
src/main/java/com/baomidou/mybatisplus/enums/IEnumTypeHandler.java

@@ -47,12 +47,16 @@ public class IEnumTypeHandler<E extends Enum<?> & IEnum> extends BaseTypeHandler
     @Override
     public void setNonNullParameter(PreparedStatement ps, int i, IEnum parameter, JdbcType jdbcType)
             throws SQLException {
-        ps.setObject(i, parameter.getValue());
+        if (jdbcType == null) {
+            ps.setObject(i, parameter.getValue());
+        } else {
+            ps.setObject(i, parameter.getValue(), jdbcType.TYPE_CODE);
+        }
     }
 
     @Override
     public E getNullableResult(ResultSet rs, String columnName) throws SQLException {
-        if (rs.wasNull()) {
+        if (null == rs.getString(columnName) && rs.wasNull()) {
             return null;
         }
         return EnumUtils.valueOf(type, rs.getObject(columnName));
@@ -60,7 +64,7 @@ public class IEnumTypeHandler<E extends Enum<?> & IEnum> extends BaseTypeHandler
 
     @Override
     public E getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
-        if (rs.wasNull()) {
+        if (null == rs.getString(columnIndex) && rs.wasNull()) {
             return null;
         }
         return EnumUtils.valueOf(type, rs.getObject(columnIndex));
@@ -68,7 +72,7 @@ public class IEnumTypeHandler<E extends Enum<?> & IEnum> extends BaseTypeHandler
 
     @Override
     public E getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
-        if (cs.wasNull()) {
+        if (null == cs.getString(columnIndex) && cs.wasNull()) {
             return null;
         }
         return EnumUtils.valueOf(type, cs.getObject(columnIndex));

+ 7 - 2
src/main/java/com/baomidou/mybatisplus/spring/MybatisSqlSessionFactoryBean.java

@@ -476,8 +476,13 @@ public class MybatisSqlSessionFactoryBean implements FactoryBean<SqlSessionFacto
             // 取得类型转换注册器
             TypeHandlerRegistry typeHandlerRegistry = this.configuration.getTypeHandlerRegistry();
             for (Class cls : classes) {
-                if (cls.isEnum() && IEnum.class.isAssignableFrom(cls)) {
-                    typeHandlerRegistry.register(cls.getName(), "com.baomidou.mybatisplus.enums.IEnumTypeHandler");
+                if (cls.isEnum()) {
+                    if (IEnum.class.isAssignableFrom(cls)) {
+                        typeHandlerRegistry.register(cls.getName(), "com.baomidou.mybatisplus.enums.IEnumTypeHandler");
+                    } else {
+                        // 使用原生 EnumOrdinalTypeHandler
+                        typeHandlerRegistry.register(cls.getName(), "org.apache.ibatis.type.EnumOrdinalTypeHandler");
+                    }
                 }
             }
         }