diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/map/Dict.java b/hutool-core/src/main/java/org/dromara/hutool/core/map/Dict.java index a8a462bde..0f1adbd60 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/map/Dict.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/map/Dict.java @@ -321,7 +321,7 @@ public class Dict extends CustomKeyMap implements TypeGetter implements TypeGetter map : mapList) { for (final Entry entry : map.entrySet()) { resultMap.computeIfAbsent(entry.getKey(), k -> new ArrayList<>()) - .add(entry.getValue()); + .add(entry.getValue()); } } @@ -625,9 +625,9 @@ public class MapUtil extends MapGetUtil { public static String join(final Map map, final String separator, final String keyValueSeparator, final Predicate> predicate, final String... otherParams) { return MapJoiner.of(separator, keyValueSeparator) - .append(map, predicate) - .append(otherParams) - .toString(); + .append(map, predicate) + .append(otherParams) + .toString(); } // ----------------------------------------------------------------------------------------------- filter @@ -951,13 +951,13 @@ public class MapUtil extends MapGetUtil { * * @param Key类型 * @param Value类型 + * @param Map类型 * @param map Map * @param keys 键列表 * @return 修改后的key - * @since 5.0.5 */ @SuppressWarnings("unchecked") - public static Map removeAny(final Map map, final K... keys) { + public static > T removeAny(final T map, final K... keys) { for (final K key : keys) { map.remove(key); } @@ -1163,8 +1163,8 @@ public class MapUtil extends MapGetUtil { */ public static Map.Entry entry(final K key, final V value, final boolean isImmutable) { return isImmutable ? - new AbstractMap.SimpleImmutableEntry<>(key, value) : - new AbstractMap.SimpleEntry<>(key, value); + new AbstractMap.SimpleImmutableEntry<>(key, value) : + new AbstractMap.SimpleEntry<>(key, value); } /** @@ -1272,7 +1272,7 @@ public class MapUtil extends MapGetUtil { * This class should be removed once we drop Java 8 support. * *

- * 注意此方法只能用于JDK8 + * 注意此方法只能用于JDK8 *

* * @param 键类型 @@ -1288,7 +1288,7 @@ public class MapUtil extends MapGetUtil { if (null == value) { value = mappingFunction.apply(key); final V res = map.putIfAbsent(key, value); - if(null != res){ + if (null != res) { // issues#I6RVMY // 如果旧值存在,说明其他线程已经赋值成功,putIfAbsent没有执行,返回旧值 return res; diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/lang/DictTest.java b/hutool-core/src/test/java/org/dromara/hutool/core/lang/DictTest.java index dbdc73a75..5fa981233 100644 --- a/hutool-core/src/test/java/org/dromara/hutool/core/lang/DictTest.java +++ b/hutool-core/src/test/java/org/dromara/hutool/core/lang/DictTest.java @@ -83,4 +83,16 @@ public class DictTest { private String username; private String nickname; } + + @Test + public void removeNewTest(){ + final Dict dict = Dict.of() + .set("key1", 1)//int + .set("key2", 1000L)//long + .set("key3", DateTime.now());//Date + + final Dict dict2 = dict.removeNew("key1"); + Assertions.assertEquals(3, dict.size()); + Assertions.assertEquals(2, dict2.size()); + } } diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/DialectRunner.java b/hutool-db/src/main/java/org/dromara/hutool/db/DialectRunner.java index 7c390e45b..4488daf62 100644 --- a/hutool-db/src/main/java/org/dromara/hutool/db/DialectRunner.java +++ b/hutool-db/src/main/java/org/dromara/hutool/db/DialectRunner.java @@ -145,9 +145,9 @@ public class DialectRunner implements Serializable { * @throws DbRuntimeException SQL执行异常 */ public int insertOrUpdate(final Connection conn, final Entity record, final String... keys) throws DbRuntimeException { - final Entity where = record.filter(keys); + final Entity where = record.filterNew(keys); if (MapUtil.isNotEmpty(where) && count(conn, Query.of(where)) > 0) { - return update(conn, record, where); + return update(conn, record.removeNew(keys), where); } else { return insert(conn, record)[0]; } diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/Entity.java b/hutool-db/src/main/java/org/dromara/hutool/db/Entity.java index d5be52daf..a25095d53 100644 --- a/hutool-db/src/main/java/org/dromara/hutool/db/Entity.java +++ b/hutool-db/src/main/java/org/dromara/hutool/db/Entity.java @@ -107,7 +107,10 @@ public class Entity extends Dict { /* 字段名列表,用于限制加入的字段的值 */ private Set fieldNames; - // --------------------------------------------------------------- Constructor start + // region ----- Constructor + /** + * 构造 + */ public Entity() { } @@ -132,7 +135,7 @@ public class Entity extends Dict { super(caseInsensitive); this.tableName = tableName; } - // --------------------------------------------------------------- Constructor end + // endregion // --------------------------------------------------------------- Getters and Setters start @@ -259,7 +262,7 @@ public class Entity extends Dict { * @since 4.0.10 */ @Override - public Entity filter(final String... keys) { + public Entity filterNew(final String... keys) { final Entity result = new Entity(this.tableName); result.setFieldNames(this.fieldNames); @@ -271,6 +274,11 @@ public class Entity extends Dict { return result; } + @Override + public Entity removeNew(final String... keys) { + return (Entity) super.removeNew(keys); + } + // -------------------------------------------------------------------- Put and Set start @Override public Entity set(final String field, final Object value) {