如何使用namedParameterJdbcTemplate 查询整数列表?我尝试按照此模板进行操作,但它在下面不起作用。
https://stackoverflow.com/a/40417349/15435022
String customerName = "JOE";
MapSqlParameterSource customerParameters = new MapSqlParameterSource();
customerParameters.addValue("CustomerName", customerName);
private static final String query = "SELECT Customer_Id From dbo.Customers WHERE Customer_Name = :CustomerName";
List<Integer> data = namedParameterJdbcTemplate.queryForList(query, Integer.class);
Error: Cannot resolve method 'queryForList(java.lang.String, java.lang.Class<java.lang.Integer>)'
最佳答案
为什么代码会出错
如 docs 中所述queryForList 方法有以下可用实现:
-
queryForList(String sql, Map<String,?> paramMap)
. -
queryForList(String sql, Map<String,?> paramMap, Class<T> elementType)
-
queryForList(String sql, SqlParameterSource paramSource)
-
queryForList(String sql, SqlParameterSource paramSource, Class<T> elementType)
这些实现都不匹配给定实现中使用的参数。因此,我们最终遇到了这个错误:
Error: Cannot resolve method 'queryForList(java.lang.String, java.lang.Class<java.lang.Integer>)'
传递缺失参数背后的想法
传递Map或ParameterSource背后的关键思想是进行动态查询,稍后我们可以在其中输入值。
例如:
String query = "Select :columnName from table";
Map<String,String> map = new HashMap<>();
map.put("columnName", "userName");
当此映射与查询字符串一起传递时,它在内部用于将占位符替换为映射中的值。
如何修复代码
有两种方法可以解决此问题:
- 只需传递null
这不是解决问题的最佳方法,绝对不建议用于生产代码。但是,如果查询字符串中没有占位符,则可以使用此方法。 代码:
List<Integer> data = namedParameterJdbcTemplate.queryForList(query, null, Integer.class);
- 创建并传递空的Map或SqlParameterSource
您的代码中已经有一个名为 customerParameters 的 MapSqlParameterSource。只需在调用queryForList()时传递它即可 代码:
List<Integer> data = namedParameterJdbcTemplate.queryForList(query, customerParameters, Integer.class);
关于java - 如何查询NamedJdbcTemplate中的单个列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68884237/