Skip to content

Commit 98edf2d

Browse files
committed
Related to #639. Added failing test case and possible fix.
1 parent 2beff6b commit 98edf2d

File tree

5 files changed

+39
-8
lines changed

5 files changed

+39
-8
lines changed

src/main/java/org/apache/ibatis/builder/annotation/ProviderSqlSource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ private SqlSource createSqlSource(Object parameterObject) {
8080
String sql;
8181
if (parameterTypes.length == 0) {
8282
sql = (String) providerMethod.invoke(providerType.newInstance());
83-
} else if (parameterTypes.length == 1) {
83+
} else if (parameterTypes[0].isAssignableFrom(parameterObject.getClass())) {
8484
sql = (String) providerMethod.invoke(providerType.newInstance(), parameterObject);
8585
} else if (parameterObject instanceof Map) {
8686
@SuppressWarnings("unchecked")

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Copyright 2009-2015 the original author or authors.
2+
* Copyright 2009-2016 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.

src/test/java/org/apache/ibatis/submitted/sqlprovider/Mapper.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public interface Mapper {
2727

2828
@SelectProvider(type = OurSqlBuilder.class, method = "buildGetUserQuery")
2929
User getUser(Integer userId);
30-
30+
3131
@SelectProvider(type = OurSqlBuilder.class, method = "buildGetAllUsersQuery")
3232
List<User> getAllUsers();
3333

@@ -43,7 +43,10 @@ public interface Mapper {
4343
@SelectProvider(type = OurSqlBuilder.class, method = "buildGetUsersByNameUsingMap")
4444
List<User> getUsersByNameUsingMap(String name, String orderByColumn);
4545

46+
@SelectProvider(type = OurSqlBuilder.class, method = "buildGetUsersByNameWithParamNameAndOrderByQuery")
47+
List<User> getUsersByNameWithParamNameAndOrderBy(@Param("name") String name, @Param("orderByColumn") String orderByColumn);
48+
4649
@SelectProvider(type = OurSqlBuilder.class, method = "buildGetUsersByNameWithParamNameQuery")
47-
List<User> getUsersByNameWithParamName(@Param("name") String name, @Param("orderByColumn") String orderByColumn);
50+
List<User> getUsersByNameWithParamName(@Param("name") String name);
4851

4952
}

src/test/java/org/apache/ibatis/submitted/sqlprovider/OurSqlBuilder.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ public String buildGetUsersByNameUsingMap(Map<String, Object> params) {
101101
}}.toString();
102102
}
103103

104-
public String buildGetUsersByNameWithParamNameQuery(@Param("orderByColumn") final String orderByColumn, @Param("name") final String name) {
104+
public String buildGetUsersByNameWithParamNameAndOrderByQuery(@Param("orderByColumn") final String orderByColumn, @Param("name") final String name) {
105105
return new SQL(){{
106106
SELECT("*");
107107
FROM("users");
@@ -112,6 +112,17 @@ public String buildGetUsersByNameWithParamNameQuery(@Param("orderByColumn") fina
112112
}}.toString();
113113
}
114114

115+
public String buildGetUsersByNameWithParamNameQuery(@Param("name") final String name) {
116+
return new SQL(){{
117+
SELECT("*");
118+
FROM("users");
119+
if (name != null) {
120+
WHERE("name like #{name} || '%'");
121+
}
122+
ORDER_BY("id DESC");
123+
}}.toString();
124+
}
125+
115126
public String buildGetUsersByNameWithParamNameQueryUsingMap(Map<String, Object> params) {
116127
final String name = String.class.cast(params.get("name"));
117128
final String orderByColumn = String.class.cast(params.get("orderByColumn"));

src/test/java/org/apache/ibatis/submitted/sqlprovider/SqlProviderTest.java

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -208,11 +208,11 @@ public void shouldGetUsersByNameUsingMap() {
208208

209209
// Test for multiple parameter with @Param
210210
@Test
211-
public void shouldGetUsersByNameWithParamName() {
211+
public void shouldGetUsersByNameWithParamNameAndOrderBy() {
212212
SqlSession sqlSession = sqlSessionFactory.openSession();
213213
try {
214214
Mapper mapper = sqlSession.getMapper(Mapper.class);
215-
List<User> users = mapper.getUsersByNameWithParamName("User", "id DESC");
215+
List<User> users = mapper.getUsersByNameWithParamNameAndOrderBy("User", "id DESC");
216216
assertEquals(4, users.size());
217217
assertEquals("User4", users.get(0).getName());
218218
assertEquals("User3", users.get(1).getName());
@@ -229,7 +229,7 @@ public void shouldGetUsersByNameWithParamNameUsingMap() {
229229
SqlSession sqlSession = sqlSessionFactory.openSession();
230230
try {
231231
Mapper mapper = sqlSession.getMapper(Mapper.class);
232-
List<User> users = mapper.getUsersByNameWithParamName("User", "id DESC");
232+
List<User> users = mapper.getUsersByNameWithParamNameAndOrderBy("User", "id DESC");
233233
assertEquals(4, users.size());
234234
assertEquals("User4", users.get(0).getName());
235235
assertEquals("User3", users.get(1).getName());
@@ -240,6 +240,23 @@ public void shouldGetUsersByNameWithParamNameUsingMap() {
240240
}
241241
}
242242

243+
// Test for map with @Param
244+
@Test
245+
public void shouldGetUsersByNameWithParamName() {
246+
SqlSession sqlSession = sqlSessionFactory.openSession();
247+
try {
248+
Mapper mapper = sqlSession.getMapper(Mapper.class);
249+
List<User> users = mapper.getUsersByNameWithParamName("User");
250+
assertEquals(4, users.size());
251+
assertEquals("User4", users.get(0).getName());
252+
assertEquals("User3", users.get(1).getName());
253+
assertEquals("User2", users.get(2).getName());
254+
assertEquals("User1", users.get(3).getName());
255+
} finally {
256+
sqlSession.close();
257+
}
258+
}
259+
243260
@Test
244261
public void methodNotFound() throws NoSuchMethodException {
245262
expectedException.expect(BuilderException.class);

0 commit comments

Comments
 (0)