Skip to content

Commit f025268

Browse files
committed
http://code.google.com/p/mybatis/issues/detail?id=43 . Maps keys are wrong when using mapUnderscoreToCamelCase=true
1 parent 1d22423 commit f025268

File tree

7 files changed

+28
-9
lines changed

7 files changed

+28
-9
lines changed

src/main/java/org/apache/ibatis/executor/resultset/FastResultSetHandler.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -269,11 +269,10 @@ protected Object getPropertyMappingValue(ResultSet rs, MetaObject metaResultObje
269269
return null;
270270
}
271271

272-
protected boolean applyAutomaticMappings(ResultSet rs, List<String> unmappedColumnNames, MetaObject metaObject, boolean useCamelCaseMapping) throws SQLException {
272+
protected boolean applyAutomaticMappings(ResultSet rs, List<String> unmappedColumnNames, MetaObject metaObject, boolean mapUnderscoreToCamelCase ) throws SQLException {
273273
boolean foundValues = false;
274274
for (String columnName : unmappedColumnNames) {
275-
final String propertyName = useCamelCaseMapping ? columnName.replace("_", "") : columnName;
276-
final String property = metaObject.findProperty(propertyName);
275+
final String property = metaObject.findProperty(columnName, mapUnderscoreToCamelCase );
277276
if (property != null) {
278277
final Class propertyType = metaObject.getSetterType(property);
279278
if (typeHandlerRegistry.hasTypeHandler(propertyType)) {

src/main/java/org/apache/ibatis/reflection/MetaObject.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ public Object getOriginalObject() {
6262
return originalObject;
6363
}
6464

65-
public String findProperty(String propName) {
66-
return objectWrapper.findProperty(propName);
65+
public String findProperty(String propName, boolean useCamelCaseMapping) {
66+
return objectWrapper.findProperty(propName, useCamelCaseMapping);
6767
}
6868

6969
public String[] getGetterNames() {

src/main/java/org/apache/ibatis/reflection/wrapper/BeanWrapper.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,10 @@ public void set(PropertyTokenizer prop, Object value) {
3737
}
3838
}
3939

40-
public String findProperty(String name) {
40+
public String findProperty(String name, boolean useCamelCaseMapping) {
41+
if (useCamelCaseMapping) {
42+
name = name.replace("_", "");
43+
}
4144
return metaClass.findProperty(name);
4245
}
4346

src/main/java/org/apache/ibatis/reflection/wrapper/MapWrapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public void set(PropertyTokenizer prop, Object value) {
3434
}
3535
}
3636

37-
public String findProperty(String name) {
37+
public String findProperty(String name, boolean useCamelCaseMapping) {
3838
return name;
3939
}
4040

src/main/java/org/apache/ibatis/reflection/wrapper/ObjectWrapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public interface ObjectWrapper {
1010

1111
void set(PropertyTokenizer prop, Object value);
1212

13-
String findProperty(String name);
13+
String findProperty(String name, boolean useCamelCaseMapping);
1414

1515
String[] getGetterNames();
1616

src/test/java/org/apache/ibatis/submitted/camelcase/CamelCaseMappingTest.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public static void setUp() throws Exception {
4747

4848
@SuppressWarnings("unchecked")
4949
@Test
50-
public void testIt() {
50+
public void testList() {
5151
SqlSession sqlSession = sqlSessionFactory.openSession();
5252
try {
5353
List<Camel> list = sqlSession.selectList("org.apache.ibatis.submitted.camel.doSelect");
@@ -59,4 +59,17 @@ public void testIt() {
5959
}
6060
}
6161

62+
@SuppressWarnings("unchecked")
63+
@Test
64+
public void testMap() {
65+
SqlSession sqlSession = sqlSessionFactory.openSession();
66+
try {
67+
List list = sqlSession.selectList("org.apache.ibatis.submitted.camel.doSelectMap");
68+
Assert.assertTrue(list.size() > 0);
69+
Assert.assertTrue(Map.class.cast(list.get(0)).containsKey("LAST_NAME"));
70+
} finally {
71+
sqlSession.close();
72+
}
73+
}
74+
6275
}

src/test/java/org/apache/ibatis/submitted/camelcase/Map.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,8 @@
99
select * from names
1010
</select>
1111

12+
<select id="doSelectMap" resultType="map">
13+
select * from names
14+
</select>
15+
1216
</mapper>

0 commit comments

Comments
 (0)