diff --git a/CHANGELOG.md b/CHANGELOG.md index b8bb6f0d1..51b15c717 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ * 【core 】 增加Interner和InternUtil(issue#I1TU1Y@Gitee) * 【core 】 增加Calculator(issue#1090@Github) * 【core 】 IdcardUtil增加getIdcardInfo方法(issue#1092@Github) +* 【core 】 改进ObjectUtil.equal,支持BigDecimal判断 ### Bug修复 * 【core 】 修复Dict.of错误(issue#I1UUO5@Gitee) diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ObjectUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ObjectUtil.java index 6b2a8261a..14100d28a 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/ObjectUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/ObjectUtil.java @@ -13,6 +13,7 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.lang.reflect.Array; +import java.math.BigDecimal; import java.util.*; /** @@ -22,14 +23,33 @@ import java.util.*; */ public class ObjectUtil { + /** + * 比较两个对象是否相等,此方法是 {@link #equal(Object, Object)}的别名方法。
+ * 相同的条件有两个,满足其一即可:
+ *
    + *
  1. obj1 == null && obj2 == null
  2. + *
  3. obj1.equals(obj2)
  4. + *
  5. 如果是BigDecimal比较,0 == obj1.compareTo(obj2)
  6. + *
+ * + * @param obj1 对象1 + * @param obj2 对象2 + * @return 是否相等 + * @see #equal(Object, Object) + * @since 5.4.3 + */ + public static boolean equals(Object obj1, Object obj2) { + return equal(obj1, obj2); + } + /** * 比较两个对象是否相等。
* 相同的条件有两个,满足其一即可:
*
    *
  1. obj1 == null && obj2 == null
  2. *
  3. obj1.equals(obj2)
  4. + *
  5. 如果是BigDecimal比较,0 == obj1.compareTo(obj2)
  6. *
- * 1. obj1 == null && obj2 == null 2. obj1.equals(obj2) * * @param obj1 对象1 * @param obj2 对象2 @@ -37,7 +57,9 @@ public class ObjectUtil { * @see Objects#equals(Object, Object) */ public static boolean equal(Object obj1, Object obj2) { - // return (obj1 != null) ? (obj1.equals(obj2)) : (obj2 == null); + if(obj1 instanceof BigDecimal && obj2 instanceof BigDecimal){ + return NumberUtil.equals((BigDecimal)obj1, (BigDecimal)obj2); + } return Objects.equals(obj1, obj2); } diff --git a/hutool-db/src/main/java/cn/hutool/db/StatementUtil.java b/hutool-db/src/main/java/cn/hutool/db/StatementUtil.java index 1f751481b..413e5a5ce 100644 --- a/hutool-db/src/main/java/cn/hutool/db/StatementUtil.java +++ b/hutool-db/src/main/java/cn/hutool/db/StatementUtil.java @@ -1,7 +1,7 @@ package cn.hutool.db; import cn.hutool.core.collection.ArrayIter; -import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ArrayUtil; @@ -13,8 +13,19 @@ import cn.hutool.db.sql.SqlUtil; import java.math.BigDecimal; import java.math.BigInteger; -import java.sql.*; -import java.util.*; +import java.sql.CallableStatement; +import java.sql.Connection; +import java.sql.ParameterMetaData; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.sql.Types; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * Statement和PreparedStatement工具类 @@ -191,7 +202,7 @@ public class StatementUtil { //null参数的类型缓存,避免循环中重复获取类型 final Map nullTypeMap = new HashMap<>(); for (Entity entity : entities) { - fillParams(ps, CollectionUtil.valuesOfKeys(entity, fields), nullTypeMap); + fillParams(ps, CollUtil.valuesOfKeys(entity, fields), nullTypeMap); ps.addBatch(); } return ps; diff --git a/hutool-db/src/main/java/cn/hutool/db/sql/SqlBuilder.java b/hutool-db/src/main/java/cn/hutool/db/sql/SqlBuilder.java index f1775ddcf..433c62ab9 100644 --- a/hutool-db/src/main/java/cn/hutool/db/sql/SqlBuilder.java +++ b/hutool-db/src/main/java/cn/hutool/db/sql/SqlBuilder.java @@ -101,7 +101,7 @@ public class SqlBuilder implements Builder{ * 插入会忽略空的字段名及其对应值,但是对于有字段名对应值为{@code null}的情况不忽略 * * @param entity 实体 - * @param dialectName 方言名 + * @param dialectName 方言名,用于对特殊数据库特殊处理 * @return 自己 */ public SqlBuilder insert(Entity entity, DialectName dialectName) {