Forráskód Böngészése

调整数据比较.

nieqiurong 2 hónapja
szülő
commit
53650e30db

+ 14 - 16
mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser-4.9/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/DataChangeRecorderInnerInterceptor.java

@@ -863,26 +863,24 @@ public class DataChangeRecorderInnerInterceptor implements InnerInterceptor {
         private Object originalValue;
         private Object updateValue;
 
-        @SuppressWarnings("rawtypes")
+        @SuppressWarnings({"rawtypes", "unchecked"})
         public boolean isDataChanged(Object updateValue) {
-            if (!Objects.equals(originalValue, updateValue)) {
-                if (originalValue instanceof Clob) {
-                    String originalStr = convertClob((Clob) originalValue);
-                    setOriginalValue(originalStr);
-                    return !originalStr.equals(updateValue);
-                }
-                if (originalValue instanceof Comparable) {
-                    Comparable original = (Comparable) originalValue;
+            if (Objects.equals(originalValue, updateValue)) {
+                return false;
+            }
+            if (originalValue instanceof Clob) {
+                String originalStr = convertClob((Clob) originalValue);
+                setOriginalValue(originalStr);
+                return !originalStr.equals(updateValue);
+            }
+            if (originalValue instanceof Comparable) {
+                Comparable original = (Comparable) originalValue;
+                if (original.getClass().isInstance(updateValue)) {
                     Comparable update = (Comparable) updateValue;
-                    try {
-                        return update == null || original.compareTo(update) != 0;
-                    } catch (Exception e) {
-                        return true;
-                    }
+                    return original.compareTo(update) != 0;
                 }
-                return true;
             }
-            return false;
+            return true;
         }
 
         public static String convertClob(Clob clobObj) {

+ 30 - 0
mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser-4.9/src/test/java/com/baomidou/mybatisplus/test/extension/plugins/inner/DataChangeRecorderInnerInterceptorTest.java

@@ -9,6 +9,7 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 import java.lang.reflect.Field;
+import java.math.BigDecimal;
 import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
@@ -60,4 +61,33 @@ class DataChangeRecorderInnerInterceptorTest {
         Assertions.assertFalse(operationResult.isRecordStatus());
         Assertions.assertNull(operationResult.getChangedData());
     }
+
+    @Test
+    void isDataChangedTest() {
+        var columnChangeResult = new DataChangeRecorderInnerInterceptor.DataColumnChangeResult();
+        Assertions.assertFalse(columnChangeResult.isDataChanged(null));
+        Assertions.assertTrue(columnChangeResult.isDataChanged(BigDecimal.ZERO));
+
+        columnChangeResult = new DataChangeRecorderInnerInterceptor.DataColumnChangeResult();
+        columnChangeResult.setOriginalValue(new Object());
+        Assertions.assertTrue(columnChangeResult.isDataChanged(null));
+        Assertions.assertTrue(columnChangeResult.isDataChanged(BigDecimal.ZERO));
+
+        columnChangeResult = new DataChangeRecorderInnerInterceptor.DataColumnChangeResult();
+        columnChangeResult.setOriginalValue(new BigDecimal("0"));
+        Assertions.assertFalse(columnChangeResult.isDataChanged(BigDecimal.ZERO));
+
+        columnChangeResult = new DataChangeRecorderInnerInterceptor.DataColumnChangeResult();
+        columnChangeResult.setOriginalValue(BigDecimal.ZERO);
+        Assertions.assertFalse(columnChangeResult.isDataChanged(BigDecimal.ZERO));
+
+        columnChangeResult = new DataChangeRecorderInnerInterceptor.DataColumnChangeResult();
+        columnChangeResult.setOriginalValue(BigDecimal.ZERO);
+        Assertions.assertTrue(columnChangeResult.isDataChanged("0"));
+        Assertions.assertTrue(columnChangeResult.isDataChanged(0));
+
+        Assertions.assertFalse(columnChangeResult.isDataChanged(new BigDecimal("0") {}));
+        Assertions.assertTrue(columnChangeResult.isDataChanged(new BigDecimal("1") {}));
+    }
+
 }

+ 14 - 16
mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser-5.0/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/DataChangeRecorderInnerInterceptor.java

@@ -863,26 +863,24 @@ public class DataChangeRecorderInnerInterceptor implements InnerInterceptor {
         private Object originalValue;
         private Object updateValue;
 
-        @SuppressWarnings("rawtypes")
+        @SuppressWarnings({"rawtypes", "unchecked"})
         public boolean isDataChanged(Object updateValue) {
-            if (!Objects.equals(originalValue, updateValue)) {
-                if (originalValue instanceof Clob) {
-                    String originalStr = convertClob((Clob) originalValue);
-                    setOriginalValue(originalStr);
-                    return !originalStr.equals(updateValue);
-                }
-                if (originalValue instanceof Comparable) {
-                    Comparable original = (Comparable) originalValue;
+            if (Objects.equals(originalValue, updateValue)) {
+                return false;
+            }
+            if (originalValue instanceof Clob) {
+                String originalStr = convertClob((Clob) originalValue);
+                setOriginalValue(originalStr);
+                return !originalStr.equals(updateValue);
+            }
+            if (originalValue instanceof Comparable) {
+                Comparable original = (Comparable) originalValue;
+                if (original.getClass().isInstance(updateValue)) {
                     Comparable update = (Comparable) updateValue;
-                    try {
-                        return update == null || original.compareTo(update) != 0;
-                    } catch (Exception e) {
-                        return true;
-                    }
+                    return original.compareTo(update) != 0;
                 }
-                return true;
             }
-            return false;
+            return true;
         }
 
         public static String convertClob(Clob clobObj) {

+ 30 - 0
mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser-5.0/src/test/java/com/baomidou/mybatisplus/test/extension/plugins/inner/DataChangeRecorderInnerInterceptorTest.java

@@ -9,6 +9,7 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 import java.lang.reflect.Field;
+import java.math.BigDecimal;
 import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
@@ -60,4 +61,33 @@ class DataChangeRecorderInnerInterceptorTest {
         Assertions.assertFalse(operationResult.isRecordStatus());
         Assertions.assertNull(operationResult.getChangedData());
     }
+
+    @Test
+    void isDataChangedTest() {
+        var columnChangeResult = new DataChangeRecorderInnerInterceptor.DataColumnChangeResult();
+        Assertions.assertFalse(columnChangeResult.isDataChanged(null));
+        Assertions.assertTrue(columnChangeResult.isDataChanged(BigDecimal.ZERO));
+
+        columnChangeResult = new DataChangeRecorderInnerInterceptor.DataColumnChangeResult();
+        columnChangeResult.setOriginalValue(new Object());
+        Assertions.assertTrue(columnChangeResult.isDataChanged(null));
+        Assertions.assertTrue(columnChangeResult.isDataChanged(BigDecimal.ZERO));
+
+        columnChangeResult = new DataChangeRecorderInnerInterceptor.DataColumnChangeResult();
+        columnChangeResult.setOriginalValue(new BigDecimal("0"));
+        Assertions.assertFalse(columnChangeResult.isDataChanged(BigDecimal.ZERO));
+
+        columnChangeResult = new DataChangeRecorderInnerInterceptor.DataColumnChangeResult();
+        columnChangeResult.setOriginalValue(BigDecimal.ZERO);
+        Assertions.assertFalse(columnChangeResult.isDataChanged(BigDecimal.ZERO));
+
+        columnChangeResult = new DataChangeRecorderInnerInterceptor.DataColumnChangeResult();
+        columnChangeResult.setOriginalValue(BigDecimal.ZERO);
+        Assertions.assertTrue(columnChangeResult.isDataChanged("0"));
+        Assertions.assertTrue(columnChangeResult.isDataChanged(0));
+
+        Assertions.assertFalse(columnChangeResult.isDataChanged(new BigDecimal("0") {}));
+        Assertions.assertTrue(columnChangeResult.isDataChanged(new BigDecimal("1") {}));
+    }
+
 }

+ 15 - 17
mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/DataChangeRecorderInnerInterceptor.java

@@ -863,26 +863,24 @@ public class DataChangeRecorderInnerInterceptor implements InnerInterceptor {
         private Object originalValue;
         private Object updateValue;
 
-        @SuppressWarnings("rawtypes")
+        @SuppressWarnings({"rawtypes", "unchecked"})
         public boolean isDataChanged(Object updateValue) {
-            if (!Objects.equals(originalValue, updateValue)) {
-                if (originalValue instanceof Clob) {
-                    String originalStr = convertClob((Clob) originalValue);
-                    setOriginalValue(originalStr);
-                    return !originalStr.equals(updateValue);
-                }
-                if (originalValue instanceof Comparable) {
-                    Comparable original = (Comparable) originalValue;
-                    try {
-                        Comparable update = (Comparable) updateValue;
-                        return update == null || original.compareTo(update) != 0;
-                    } catch (Exception e) {
-                        return true;
-                    }
+            if (Objects.equals(originalValue, updateValue)) {
+                return false;
+            }
+            if (originalValue instanceof Clob) {
+                String originalStr = convertClob((Clob) originalValue);
+                setOriginalValue(originalStr);
+                return !originalStr.equals(updateValue);
+            }
+            if (originalValue instanceof Comparable) {
+                Comparable original = (Comparable) originalValue;
+                if (original.getClass().isInstance(updateValue)) {
+                    Comparable update = (Comparable) updateValue;
+                    return original.compareTo(update) != 0;
                 }
-                return true;
             }
-            return false;
+            return true;
         }
 
         public static String convertClob(Clob clobObj) {

+ 30 - 0
mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser/src/test/java/com/baomidou/mybatisplus/test/extension/plugins/inner/DataChangeRecorderInnerInterceptorTest.java

@@ -9,6 +9,7 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 import java.lang.reflect.Field;
+import java.math.BigDecimal;
 import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
@@ -60,4 +61,33 @@ class DataChangeRecorderInnerInterceptorTest {
         Assertions.assertFalse(operationResult.isRecordStatus());
         Assertions.assertNull(operationResult.getChangedData());
     }
+
+    @Test
+    void isDataChangedTest() {
+        var columnChangeResult = new DataChangeRecorderInnerInterceptor.DataColumnChangeResult();
+        Assertions.assertFalse(columnChangeResult.isDataChanged(null));
+        Assertions.assertTrue(columnChangeResult.isDataChanged(BigDecimal.ZERO));
+
+        columnChangeResult = new DataChangeRecorderInnerInterceptor.DataColumnChangeResult();
+        columnChangeResult.setOriginalValue(new Object());
+        Assertions.assertTrue(columnChangeResult.isDataChanged(null));
+        Assertions.assertTrue(columnChangeResult.isDataChanged(BigDecimal.ZERO));
+
+        columnChangeResult = new DataChangeRecorderInnerInterceptor.DataColumnChangeResult();
+        columnChangeResult.setOriginalValue(new BigDecimal("0"));
+        Assertions.assertFalse(columnChangeResult.isDataChanged(BigDecimal.ZERO));
+
+        columnChangeResult = new DataChangeRecorderInnerInterceptor.DataColumnChangeResult();
+        columnChangeResult.setOriginalValue(BigDecimal.ZERO);
+        Assertions.assertFalse(columnChangeResult.isDataChanged(BigDecimal.ZERO));
+
+        columnChangeResult = new DataChangeRecorderInnerInterceptor.DataColumnChangeResult();
+        columnChangeResult.setOriginalValue(BigDecimal.ZERO);
+        Assertions.assertTrue(columnChangeResult.isDataChanged("0"));
+        Assertions.assertTrue(columnChangeResult.isDataChanged(0));
+
+        Assertions.assertFalse(columnChangeResult.isDataChanged(new BigDecimal("0") {}));
+        Assertions.assertTrue(columnChangeResult.isDataChanged(new BigDecimal("1") {}));
+    }
+
 }