使用NamedParameterJdbcTemplate查询单字段ID列表报错问题咨询
问题原因
报错是因为NamedParameterJdbcTemplate不存在仅传入SQL语句、参数源两个参数的query重载方法,你缺少了结果集映射规则的参数,Spring无法自动将JDBC返回的单列结果转换为Long类型的列表。
实现单字段查询的方案
你只需要获取单个ID字段,不需要映射整行数据,以下两种方式都可以实现,且本身就避免了查询多余字段,已经是最优性能的实现:
方案1:使用queryForList直接指定返回类型(最简洁)
private static final String Customer_Query = "SELECT Customer_Id From dbo.Customers WHERE Customer_Name = :Customer_Name"; MapSqlParameterSource customer_parameters = new MapSqlParameterSource(); customer_parameters.addValue("Customer_Name", "Joe"); // 第三个参数指定列表元素的类型,Spring会自动完成单列结果的映射 List<Long> customerIdList = namedParameterJdbcTemplate.queryForList(Customer_Query, customer_parameters, Long.class);
方案2:使用query方法搭配SingleColumnRowMapper
如果需要自定义映射逻辑的扩展空间,可以用这个方案:
private static final String Customer_Query = "SELECT Customer_Id From dbo.Customers WHERE Customer_Name = :Customer_Name"; MapSqlParameterSource customer_parameters = new MapSqlParameterSource(); customer_parameters.addValue("Customer_Name", "Joe"); // 传入SingleColumnRowMapper指定单列映射的目标类型 List<Long> customerIdList = namedParameterJdbcTemplate.query( Customer_Query, customer_parameters, new SingleColumnRowMapper<>(Long.class) );
内容的提问来源于stack exchange,提问作者mattsmith5
相关产品推荐
相关产品推荐

