mirror of
https://github.com/moparisthebest/JdbcMapper
synced 2024-11-21 16:45:02 -05:00
Add Collection<Map<String,T>> support to QueryMapper.toType and test for it
This commit is contained in:
parent
c151f3ba0e
commit
d3c4f89316
@ -470,7 +470,22 @@ public class ResultSetMapper implements RowMapperProvider {
|
||||
if (returnType.isArray()) {
|
||||
return toArray(rs, returnType.getComponentType(), arrayMaxLength, cal);
|
||||
} else if (Collection.class.isAssignableFrom(returnType)) {
|
||||
return toCollection(rs, returnType, (Class) type.getActualTypeArguments()[0], arrayMaxLength, cal);
|
||||
final Type componentType = type.getActualTypeArguments()[0];
|
||||
if(componentType instanceof ParameterizedType) {
|
||||
final ParameterizedType parameterizedType = ((ParameterizedType) componentType);
|
||||
final Type rawType = parameterizedType.getRawType();
|
||||
if(rawType instanceof Class && Map.class.isAssignableFrom((Class)rawType)) {
|
||||
final Type[] mapTypes = parameterizedType.getActualTypeArguments();
|
||||
if (mapTypes.length == 2 && mapTypes[0].equals(String.class) && mapTypes[1] instanceof Class)
|
||||
return toCollectionMap(rs, returnType, (Class) rawType, (Class) mapTypes[1]);
|
||||
}
|
||||
}
|
||||
// if we didn't match above signature, try just a regular collection
|
||||
if(componentType instanceof Class) {
|
||||
return toCollection(rs, returnType, (Class) componentType, arrayMaxLength, cal);
|
||||
}
|
||||
// or give up...
|
||||
throw new MapperException("unknown Collection type to map...");
|
||||
} else if (Map.class.isAssignableFrom(returnType)) {
|
||||
Type[] types = type.getActualTypeArguments();
|
||||
if (types[1] instanceof ParameterizedType) { // for collectionMaps
|
||||
|
@ -156,6 +156,9 @@ public interface QmDao extends JdbcMapper {
|
||||
@SQL(bobTomMap)
|
||||
List<CaseInsensitiveHashMap<String, String>> getBobTomMapCaseInsensitive() throws SQLException;
|
||||
|
||||
@SQL(bobTomMap)
|
||||
List<CaseInsensitiveHashMap<String, String>> getBobTomMapCaseInsensitiveType() throws SQLException;
|
||||
|
||||
@SQL(selectThreePeople)
|
||||
List<FieldPerson> getThreePeople(long personNo1, long personNo2, long personNo3) throws SQLException;
|
||||
|
||||
|
@ -233,11 +233,14 @@ public class QueryMapperQmDao implements QmDao {
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public List<CaseInsensitiveHashMap<String, String>> getBobTomMapCaseInsensitive() throws SQLException {
|
||||
// todo: ParameterizedTypeImpl cannot be cast to java.lang.Class
|
||||
// return qm.toType(bobTomMap, new TypeReference<List<CaseInsensitiveHashMap<String, String>>>() {});
|
||||
return (List<CaseInsensitiveHashMap<String, String>>)(Object)qm.toListMap(bobTomMap, CaseInsensitiveHashMap.class, String.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<CaseInsensitiveHashMap<String, String>> getBobTomMapCaseInsensitiveType() throws SQLException {
|
||||
return qm.toType(bobTomMap, new TypeReference<List<CaseInsensitiveHashMap<String, String>>>() {});
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FieldPerson> getThreePeople(final long personNo1, final long personNo2, final long personNo3) throws SQLException {
|
||||
return qm.toList(selectThreePeople,
|
||||
|
@ -417,6 +417,21 @@ public class QueryMapperTest {
|
||||
assertEquals("tom", map.get("TOM"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCaseInsensitiveMapJdbcMapperType() throws Throwable {
|
||||
final Map<String, String> map = qm.getBobTomMapCaseInsensitiveType().get(0);
|
||||
assertEquals("bob", map.get("bob"));
|
||||
assertEquals("bob", map.get("Bob"));
|
||||
assertEquals("bob", map.get("BoB"));
|
||||
assertEquals("bob", map.get("BOb"));
|
||||
assertEquals("bob", map.get("BOB"));
|
||||
assertEquals("tom", map.get("tom"));
|
||||
assertEquals("tom", map.get("Tom"));
|
||||
assertEquals("tom", map.get("ToM"));
|
||||
assertEquals("tom", map.get("TOm"));
|
||||
assertEquals("tom", map.get("TOM"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testList() throws SQLException {
|
||||
final List<FieldPerson> fromDb = qm.getThreePeople(people[0].getPersonNo(), people[1].getPersonNo(), people[2].getPersonNo());
|
||||
|
Loading…
Reference in New Issue
Block a user