如何在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
相关产品推荐
相关产品推荐

