You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SpringBoot REST API中使用JdbcTemplate处理多请求参数查询?

使用JdbcTemplate实现多参数查询的几种方式

方式一:扩展基础占位符方式

直接在SQL语句中添加多个?占位符,然后在Object[]数组中按顺序传入对应的参数即可,参数顺序必须和SQL里的占位符一一对应:

String sql = "SELECT NAME FROM CUSTOMER WHERE ID = ? AND NAME = ?";

return jdbcTemplate.queryForObject(
        sql, new Object[]{id, name}, String.class);

方式二:使用NamedParameterJdbcTemplate(推荐)

如果参数较多,用命名参数会更清晰,无需关注参数顺序。首先注入NamedParameterJdbcTemplate,然后编写带命名参数(格式为:参数名)的SQL:

@Autowired
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;

public String getCustomerNameByIdAndName(Long id, String name) {
    String sql = "SELECT NAME FROM CUSTOMER WHERE ID = :id AND NAME = :name";
    
    Map<String, Object> paramMap = new HashMap<>();
    paramMap.put("id", id);
    paramMap.put("name", name);
    
    return namedParameterJdbcTemplate.queryForObject(
            sql, paramMap, String.class);
}

方式三:基于实体类的参数传递

如果参数来自一个实体类(比如Customer),可以用BeanPropertySqlParameterSource直接绑定实体属性,省去手动构建Map的步骤(要求实体类有对应的getter方法):

public String getCustomerNameByEntity(Customer customer) {
    String sql = "SELECT NAME FROM CUSTOMER WHERE ID = :id AND NAME = :name";
    
    SqlParameterSource paramSource = new BeanPropertySqlParameterSource(customer);
    
    return namedParameterJdbcTemplate.queryForObject(
            sql, paramSource, String.class);
}

注意事项

  • 使用queryForObject时,如果查询结果为空,会抛出EmptyResultDataAccessException,建议捕获该异常并做相应处理,或者改用queryForList后判断结果是否为空。
  • 若需要查询多条数据,可以使用query方法配合RowMapper来封装结果为实体类列表。

内容的提问来源于stack exchange,提问作者John Derek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 21:05:59