Skip to content

Commit 1d22423

Browse files
committed
http://code.google.com/p/mybatis/issues/detail?id=43 . Map underscore db columnnames to camelcase properties. New config param "mapUnderscoreToCamelCase" (defaults to false)
1 parent 511df48 commit 1d22423

File tree

9 files changed

+916
-759
lines changed

9 files changed

+916
-759
lines changed

src/main/java/org/apache/ibatis/builder/xml/XMLConfigBuilder.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ private void settingsElement(XNode context) throws Exception {
177177
configuration.setUseGeneratedKeys(booleanValueOf(props.getProperty("useGeneratedKeys"), false));
178178
configuration.setDefaultExecutorType(ExecutorType.valueOf(stringValueOf(props.getProperty("defaultExecutorType"), "SIMPLE")));
179179
configuration.setDefaultStatementTimeout(integerValueOf(props.getProperty("defaultStatementTimeout"), null));
180+
configuration.setMapUnderscoreToCamelCase(booleanValueOf(props.getProperty("mapUnderscoreToCamelCase"), false));
180181
}
181182
}
182183

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

Lines changed: 489 additions & 488 deletions
Large diffs are not rendered by default.

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

Lines changed: 271 additions & 271 deletions
Large diffs are not rendered by default.

src/main/java/org/apache/ibatis/session/Configuration.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ public class Configuration {
5959

6060
protected Environment environment;
6161

62+
protected boolean mapUnderscoreToCamelCase = false;
6263
protected boolean lazyLoadingEnabled = false;
6364
protected boolean aggressiveLazyLoading = true;
6465
protected boolean multipleResultSetsEnabled = true;
@@ -115,6 +116,14 @@ public Configuration() {
115116
typeAliasRegistry.registerAlias("WEAK", WeakCache.class.getName());
116117
}
117118

119+
public boolean isMapUnderscoreToCamelCase() {
120+
return mapUnderscoreToCamelCase;
121+
}
122+
123+
public void setMapUnderscoreToCamelCase(boolean mapUnderscoreToCamelCase) {
124+
this.mapUnderscoreToCamelCase = mapUnderscoreToCamelCase;
125+
}
126+
118127
public void addLoadedResource(String resource) {
119128
loadedResources.add(resource);
120129
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package org.apache.ibatis.submitted.camelcase;
2+
3+
public class Camel {
4+
5+
private String id;
6+
private String firstName;
7+
private String LAST_NAME;
8+
9+
public String getId() {
10+
return id;
11+
}
12+
public void setId(String id) {
13+
this.id = id;
14+
}
15+
public String getFirstName() {
16+
return firstName;
17+
}
18+
public void setFirstName(String firstName) {
19+
this.firstName = firstName;
20+
}
21+
public String getLAST_NAME() {
22+
return LAST_NAME;
23+
}
24+
public void setLAST_NAME(String last_name) {
25+
LAST_NAME = last_name;
26+
}
27+
28+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package org.apache.ibatis.submitted.camelcase;
2+
3+
import java.io.Reader;
4+
import java.sql.Connection;
5+
import java.sql.DriverManager;
6+
import java.util.List;
7+
import java.util.Map;
8+
9+
import org.apache.ibatis.io.Resources;
10+
import org.apache.ibatis.jdbc.ScriptRunner;
11+
import org.apache.ibatis.session.SqlSession;
12+
import org.apache.ibatis.session.SqlSessionFactory;
13+
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
14+
import org.junit.Assert;
15+
import org.junit.BeforeClass;
16+
import org.junit.Test;
17+
18+
public class CamelCaseMappingTest {
19+
20+
protected static SqlSessionFactory sqlSessionFactory;
21+
22+
@BeforeClass
23+
public static void setUp() throws Exception {
24+
Connection conn = null;
25+
26+
try {
27+
Class.forName("org.hsqldb.jdbcDriver");
28+
conn = DriverManager.getConnection("jdbc:hsqldb:mem:gname", "sa", "");
29+
Reader reader = Resources.getResourceAsReader("org/apache/ibatis/submitted/camelcase/CreateDB.sql");
30+
ScriptRunner runner = new ScriptRunner(conn);
31+
runner.setLogWriter(null);
32+
runner.setErrorLogWriter(null);
33+
runner.runScript(reader);
34+
conn.commit();
35+
reader.close();
36+
37+
reader = Resources.getResourceAsReader("org/apache/ibatis/submitted/camelcase/MapperConfig.xml");
38+
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
39+
reader.close();
40+
41+
} finally {
42+
if (conn != null) {
43+
conn.close();
44+
}
45+
}
46+
}
47+
48+
@SuppressWarnings("unchecked")
49+
@Test
50+
public void testIt() {
51+
SqlSession sqlSession = sqlSessionFactory.openSession();
52+
try {
53+
List<Camel> list = sqlSession.selectList("org.apache.ibatis.submitted.camel.doSelect");
54+
Assert.assertTrue(list.size() > 0);
55+
Assert.assertNotNull(list.get(0).getFirstName());
56+
Assert.assertNull(list.get(0).getLAST_NAME());
57+
} finally {
58+
sqlSession.close();
59+
}
60+
}
61+
62+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
drop table names if exists;
2+
3+
create table names (
4+
ID int,
5+
FIRST_NAME varchar(20),
6+
LAST_NAME varchar(20)
7+
);
8+
9+
insert into names (ID, FIRST_NAME, LAST_NAME) values(1, 'Fred', 'Flintstone');
10+
insert into names (ID, FIRST_NAME, LAST_NAME) values(2, 'Wilma', 'Flintstone');
11+
insert into names (ID, FIRST_NAME, LAST_NAME) values(3, 'Pebbles', 'Flintstone');
12+
insert into names (ID, FIRST_NAME, LAST_NAME) values(4, 'Barney', 'Rubble');
13+
insert into names (ID, FIRST_NAME, LAST_NAME) values(5, 'Betty', 'Rubble');
14+
insert into names (ID, FIRST_NAME, LAST_NAME) values(6, 'Bamm Bamm', 'Rubble');
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE mapper
3+
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
4+
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5+
6+
<mapper namespace="org.apache.ibatis.submitted.camel">
7+
8+
<select id="doSelect" resultType="org.apache.ibatis.submitted.camelcase.Camel">
9+
select * from names
10+
</select>
11+
12+
</mapper>
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
3+
<!DOCTYPE configuration
4+
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
5+
"http://mybatis.org/dtd/mybatis-3-config.dtd">
6+
7+
<configuration>
8+
9+
<settings>
10+
<setting name="mapUnderscoreToCamelCase" value="true" />
11+
</settings>
12+
13+
<environments default="development">
14+
<environment id="development">
15+
<transactionManager type="JDBC">
16+
<property name="" value="" />
17+
</transactionManager>
18+
<dataSource type="UNPOOLED">
19+
<property name="driver" value="org.hsqldb.jdbcDriver" />
20+
<property name="url" value="jdbc:hsqldb:mem:gname" />
21+
<property name="username" value="sa" />
22+
</dataSource>
23+
</environment>
24+
</environments>
25+
26+
<mappers>
27+
<mapper resource="org/apache/ibatis/submitted/camelcase/Map.xml" />
28+
</mappers>
29+
30+
</configuration>

0 commit comments

Comments
 (0)