如何查询 NamedJdbcTemplate 中的单个列?
How to query for a single column in NamedJdbcTemplate?
如何使用 namedParameterJdbcTemplate 查询整数列表?我试过按照这个模板,它在下面不起作用。
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)
None 这些实现与给定实现中使用的参数相匹配。因此,我们最终得到这个错误:
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");
当此地图与 query String 一起传递时,它在内部用于用地图中的值替换占位符。
如何修复代码
有两种方法可以解决此问题:
- 直接传null
这不是解决问题的最佳方法,绝对不推荐用于生产代码。但是,如果查询字符串中没有占位符,则可以使用它。
代码:
List<Integer> data = namedParameterJdbcTemplate.queryForList(query, null, Integer.class);
- 创建并传递一个空的 Map 或 SqlParameterSource
您的代码中已经有一个名为 customerParameters 的 MapSqlParameterSource。只需在调用 queryForList() 时传递它
代码:
List<Integer> data = namedParameterJdbcTemplate.queryForList(query, customerParameters, Integer.class);
如何使用 namedParameterJdbcTemplate 查询整数列表?我试过按照这个模板,它在下面不起作用。
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)
None 这些实现与给定实现中使用的参数相匹配。因此,我们最终得到这个错误:
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");
当此地图与 query String 一起传递时,它在内部用于用地图中的值替换占位符。
如何修复代码
有两种方法可以解决此问题:
- 直接传null
这不是解决问题的最佳方法,绝对不推荐用于生产代码。但是,如果查询字符串中没有占位符,则可以使用它。 代码:
List<Integer> data = namedParameterJdbcTemplate.queryForList(query, null, Integer.class);
- 创建并传递一个空的 Map 或 SqlParameterSource
您的代码中已经有一个名为 customerParameters 的 MapSqlParameterSource。只需在调用 queryForList() 时传递它 代码:
List<Integer> data = namedParameterJdbcTemplate.queryForList(query, customerParameters, Integer.class);