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..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 + * 转换为Map,若value原本就是Map,则转为原始类型,若不是则默认转为HashMap * * @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..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 @@ -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,31 @@ 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<>(); 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"));