带有命名参数和行映射器的列表的Java Jdbctemplate查询?
Posted
技术标签:
【中文标题】带有命名参数和行映射器的列表的Java Jdbctemplate查询?【英文标题】:Java Jdbctemplate query for list with named parameter and row mapper? 【发布时间】:2018-09-22 13:20:25 【问题描述】:我正在尝试实现一个Jdbctemplate
查询方法,该方法将一个命名参数映射和一个行映射器作为附加参数。
到目前为止,我有以下内容:
final SqlParameterSource namedParameters = new MapSqlParameterSource().addValue("searchTerm", "%" + text + "%");
List<Map<String, String>> result = (List<Map<String, String>>)jdbcTemplate.queryForList(query, namedParameters, (ResultSet rs) ->
List<Map<String, String>> rows = new ArrayList<>();
while (rs.next())
Map<String, String> row = new HashMap<>();
for (int x = 0, j = queryColumns.length; x < j; x++)
row.put(queryColumns[x], rs.getString(queryColumns[x]));
rows.add(row);
return rows;
);
return result;
这给了我以下错误:
错误:(67, 83) java: 没有找到合适的方法 queryForList(java.lang.String,org.springframework.jdbc.core.namedparam.SqlParameterSource,(ResultSet[...]ws; ) 方法 org.springframework.jdbc.core.JdbcTemplate.queryForList(java.lang.String,java.lang.Class) 不适用 (无法推断类型变量 T (实际参数列表和形式参数列表的长度不同)) 方法 org.springframework.jdbc.core.JdbcTemplate.queryForList(java.lang.String,java.lang.Object[],int[],java.lang.Class) 不适用....
是否可以使用 Jdbctemplate 进行这种查询,我该怎么做?
【问题讨论】:
【参考方案1】:通过 NamedParameterJdbcTemplates 支持命名参数。 你可以使用类似的东西:
final Map<String, Object> namedParameters = Collections.singletonMap("searchTerm", "%" + text + "%");
List<Map<String, String>> result = new NamedParameterJdbcTemplate(jdbcTemplate).query(query, namedParameters, (rs, rowNum) ->
Map<String, String> row = new HashMap<>();
for (int x = 0, j = queryColumns.length; x < j; x++)
row.put(queryColumns[x], rs.getString(queryColumns[x]));
return row;
);
return result;
【讨论】:
以上是关于带有命名参数和行映射器的列表的Java Jdbctemplate查询?的主要内容,如果未能解决你的问题,请参考以下文章