瀏覽代碼

修正枚举处理器类型不匹配比较.

https://github.com/baomidou/mybatis-plus/pull/2260
聂秋秋 5 年之前
父節點
當前提交
8e01bb3315

+ 4 - 2
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/handlers/MybatisEnumTypeHandler.java

@@ -159,11 +159,13 @@ public class MybatisEnumTypeHandler<E extends Enum<?>> extends BaseTypeHandler<E
      * @since 3.3.0
      */
     protected boolean equalsValue(Object sourceValue, Object targetValue) {
+        String sValue = Objects.toString(sourceValue);
+        String tValue = Objects.toString(targetValue);
         if (sourceValue instanceof Number && targetValue instanceof Number
-            && new BigDecimal(String.valueOf(sourceValue)).compareTo(new BigDecimal(String.valueOf(targetValue))) == 0) {
+            && new BigDecimal(sValue).compareTo(new BigDecimal(tValue)) == 0) {
             return true;
         }
-        return Objects.equals(sourceValue, targetValue);
+        return Objects.equals(sValue, tValue);
     }
 
     private Object getValue(Object object) {

+ 21 - 1
mybatis-plus-extension/src/test/java/com/baomidou/mybatisplus/extension/handlers/MybatisEnumTypeHandlerTest.java

@@ -36,6 +36,8 @@ public class MybatisEnumTypeHandlerTest extends BaseTypeHandlerTest {
     private static final MybatisEnumTypeHandler<SexEnum> SEX_ENUM_ENUM_TYPE_HANDLER = new MybatisEnumTypeHandler<>(SexEnum.class);
 
     private static final MybatisEnumTypeHandler<GradeEnum> GRADE_ENUM_ENUM_TYPE_HANDLER = new MybatisEnumTypeHandler<>(GradeEnum.class);
+    
+    private static final MybatisEnumTypeHandler<CharacterEnum> CHARACTER_ENUM_MYBATIS_ENUM_TYPE_HANDLER = new MybatisEnumTypeHandler<>(CharacterEnum.class);
 
     @Getter
     @AllArgsConstructor
@@ -65,6 +67,17 @@ public class MybatisEnumTypeHandlerTest extends BaseTypeHandlerTest {
 
         private final String desc;
     }
+    
+    @Getter
+    @AllArgsConstructor
+    enum CharacterEnum {
+        MAN('1', "男"),
+        WO_MAN('2', "女");
+        
+        @EnumValue
+        char code;
+        String desc;
+    }
 
     @Test
     void dealEnumType(){
@@ -103,13 +116,20 @@ public class MybatisEnumTypeHandlerTest extends BaseTypeHandlerTest {
         assertEquals(SexEnum.MAN, SEX_ENUM_ENUM_TYPE_HANDLER.getResult(resultSet, "column"));
         when(resultSet.getObject("column")).thenReturn(2);
         assertEquals(SexEnum.WO_MAN, SEX_ENUM_ENUM_TYPE_HANDLER.getResult(resultSet, "column"));
-        when(resultSet.getObject("column")).thenReturn(null);
 
+        when(resultSet.getObject("column")).thenReturn(null);
         assertNull(GRADE_ENUM_ENUM_TYPE_HANDLER.getResult(resultSet, "column"));
         when(resultSet.getObject("column")).thenReturn(1);
         assertEquals(GradeEnum.PRIMARY, GRADE_ENUM_ENUM_TYPE_HANDLER.getResult(resultSet, "column"));
         when(resultSet.getObject("column")).thenReturn(2);
         assertEquals(GradeEnum.SECONDARY, GRADE_ENUM_ENUM_TYPE_HANDLER.getResult(resultSet, "column"));
+    
+        when(resultSet.getObject("column")).thenReturn(null);
+        assertNull(CHARACTER_ENUM_MYBATIS_ENUM_TYPE_HANDLER.getResult(resultSet, "column"));
+        when(resultSet.getObject("column")).thenReturn("1");
+        assertEquals(CharacterEnum.MAN, CHARACTER_ENUM_MYBATIS_ENUM_TYPE_HANDLER.getResult(resultSet, "column"));
+        when(resultSet.getObject("column")).thenReturn("2");
+        assertEquals(CharacterEnum.WO_MAN, CHARACTER_ENUM_MYBATIS_ENUM_TYPE_HANDLER.getResult(resultSet, "column"));
     }
 
     @Test