From de52d71031292aa8639d45376adb07f40447c012 Mon Sep 17 00:00:00 2001 From: wenbei <569063716@qq.com> Date: Tue, 26 Jul 2022 11:55:00 +0800 Subject: [PATCH 1/3] 1.update Convert.toMap, If value is a map type, use its own type; otherwise, use HashMap 2.add Convert.toMap, Overload a method to specify the map type of conversion --- .../java/cn/hutool/core/convert/Convert.java | 24 +++++++++++++++-- .../core/convert/ConvertToBeanTest.java | 26 +++++++++++++++++++ 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/Convert.java b/hutool-core/src/main/java/cn/hutool/core/convert/Convert.java index a67682904..7bc2a5b88 100755 --- a/hutool-core/src/main/java/cn/hutool/core/convert/Convert.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/Convert.java @@ -601,7 +601,7 @@ public class Convert { } /** - * 转换为Map + * 转换为Map,若value原本就是Map,则使用原始类型若不是 * * @param 键类型 * @param 值类型 @@ -613,7 +613,27 @@ public class Convert { */ @SuppressWarnings("unchecked") public static Map toMap(Class keyType, Class valueType, Object value) { - return (Map) new MapConverter(HashMap.class, keyType, valueType).convert(value, null); + if(value instanceof Map){ + return toMap((Class) value.getClass(), keyType, valueType,value); + }else{ + return toMap(HashMap.class, keyType, valueType,value); + } + } + + /** + * 转换为Map + * + * @param mapType 转后的具体Map类型 + * @param 键类型 + * @param 值类型 + * @param keyType 键类型 + * @param valueType 值类型 + * @param value 被转换的值 + * @return {@link Map} + */ + @SuppressWarnings("unchecked") + public static Map toMap(Class mapType, Class keyType, Class valueType, Object value) { + return (Map) new MapConverter(mapType, keyType, valueType).convert(value, null); } /** diff --git a/hutool-core/src/test/java/cn/hutool/core/convert/ConvertToBeanTest.java b/hutool-core/src/test/java/cn/hutool/core/convert/ConvertToBeanTest.java index 8ab5b15ff..f37bb9e3a 100755 --- a/hutool-core/src/test/java/cn/hutool/core/convert/ConvertToBeanTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/convert/ConvertToBeanTest.java @@ -2,6 +2,7 @@ package cn.hutool.core.convert; import cn.hutool.core.bean.BeanUtilTest.SubPerson; import cn.hutool.core.lang.TypeReference; +import cn.hutool.core.map.CaseInsensitiveMap; import org.junit.Assert; import org.junit.Test; @@ -67,7 +68,32 @@ public class ConvertToBeanTest { Assert.assertEquals("3", map2.get("key3")); Assert.assertEquals("4", map2.get("key4")); } + @Test + public void mapToMapWithSelfTypeTest() { + CaseInsensitiveMap caseInsensitiveMap = new CaseInsensitiveMap<>(); + caseInsensitiveMap.put("jerry", 1); + caseInsensitiveMap.put("Jerry", 2); + caseInsensitiveMap.put("tom", 3); + + Map map = Convert.toMap(String.class, String.class, caseInsensitiveMap); + Assert.assertEquals("2", map.get("jerry")); + Assert.assertEquals("2", map.get("Jerry")); + Assert.assertEquals("3", map.get("tom")); + } + @Test + public void beanToSpecifyMapTest() { + SubPerson person = new SubPerson(); + person.setAge(14); + person.setOpenid("11213232"); + person.setName("测试A11"); + person.setSubName("sub名字"); + + Map map = Convert.toMap(LinkedHashMap.class, String.class, String.class, person); + Assert.assertEquals("测试A11", map.get("name")); + Assert.assertEquals("14", map.get("age")); + Assert.assertEquals("11213232", map.get("openid")); + } @Test public void mapToBeanTest() { HashMap map = new HashMap<>(); From bb85c4092439ac634cb6e53994ea980fd64878b6 Mon Sep 17 00:00:00 2001 From: wenbei <569063716@qq.com> Date: Tue, 26 Jul 2022 12:33:09 +0800 Subject: [PATCH 2/3] =?UTF-8?q?1.=E6=9B=B4=E6=96=B0=20Convert.toMap?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E6=B3=A8=E9=87=8A=EF=BC=8C=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E5=8C=96=E4=BB=A3=E7=A0=81=202.=E5=88=A0=E9=99=A4mapToMapWithS?= =?UTF-8?q?elfTypeTest=E6=96=B9=E6=B3=95=E5=A4=9A=E4=BD=99=E7=A9=BA?= =?UTF-8?q?=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/cn/hutool/core/convert/Convert.java | 10 +++++----- .../java/cn/hutool/core/convert/ConvertToBeanTest.java | 1 - 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/Convert.java b/hutool-core/src/main/java/cn/hutool/core/convert/Convert.java index 7bc2a5b88..47f089630 100755 --- a/hutool-core/src/main/java/cn/hutool/core/convert/Convert.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/Convert.java @@ -601,7 +601,7 @@ public class Convert { } /** - * 转换为Map,若value原本就是Map,则使用原始类型若不是 + * 转换为Map,若value原本就是Map,则转为原始类型,若不是则默认转为HashMap * * @param 键类型 * @param 值类型 @@ -613,10 +613,10 @@ public class Convert { */ @SuppressWarnings("unchecked") public static Map toMap(Class keyType, Class valueType, Object value) { - if(value instanceof Map){ - return toMap((Class) value.getClass(), keyType, valueType,value); - }else{ - return toMap(HashMap.class, keyType, valueType,value); + if (value instanceof Map) { + return toMap((Class) value.getClass(), keyType, valueType, value); + } else { + return toMap(HashMap.class, keyType, valueType, value); } } diff --git a/hutool-core/src/test/java/cn/hutool/core/convert/ConvertToBeanTest.java b/hutool-core/src/test/java/cn/hutool/core/convert/ConvertToBeanTest.java index f37bb9e3a..acbb34a07 100755 --- a/hutool-core/src/test/java/cn/hutool/core/convert/ConvertToBeanTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/convert/ConvertToBeanTest.java @@ -70,7 +70,6 @@ public class ConvertToBeanTest { } @Test public void mapToMapWithSelfTypeTest() { - CaseInsensitiveMap caseInsensitiveMap = new CaseInsensitiveMap<>(); caseInsensitiveMap.put("jerry", 1); caseInsensitiveMap.put("Jerry", 2); From 971dcd06ad83a4ea168a60c1505a34bb1786707d Mon Sep 17 00:00:00 2001 From: wenbei <569063716@qq.com> Date: Tue, 26 Jul 2022 13:58:45 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0pageTest=E6=96=B9?= =?UTF-8?q?=E6=B3=95=EF=BC=8C=E6=B5=8B=E8=AF=95issue#I5IG1F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hutool-db/src/test/java/cn/hutool/db/H2Test.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/hutool-db/src/test/java/cn/hutool/db/H2Test.java b/hutool-db/src/test/java/cn/hutool/db/H2Test.java index bc7e48dd7..0cd77fe5e 100644 --- a/hutool-db/src/test/java/cn/hutool/db/H2Test.java +++ b/hutool-db/src/test/java/cn/hutool/db/H2Test.java @@ -1,11 +1,14 @@ package cn.hutool.db; +import cn.hutool.core.map.CaseInsensitiveMap; +import cn.hutool.core.map.MapUtil; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import java.sql.SQLException; import java.util.List; +import java.util.Map; /** * H2数据库单元测试 @@ -34,6 +37,17 @@ public class H2Test { Assert.assertEquals(4, query.size()); } + @Test + public void pageTest() throws SQLException { + String sql = "select * from test where a = @a and b = :b"; + Map paramMap = MapUtil.builder(new CaseInsensitiveMap()) + .put("A", 3) + .put("b", 31) + .build(); + List query = Db.use(DS_GROUP_NAME).page(sql, Page.of(0, 3), paramMap); + Assert.assertEquals(1, query.size()); + } + @Test public void findTest() throws SQLException { List query = Db.use(DS_GROUP_NAME).find(Entity.create("test"));