NamedParameterJdbcTemplate用法
2019-04-10 本文已影响0人
西安法律咨询服务平台与程序员
为啥不用JdbcTemplate,而要使用NamedParameterJdbcTemplate
因为JdbcTemplate不好用。具体说来2点:
- jdbcTemplate.queryForObject方法入参不支持以Map的形式传递参数,需要按照sql语句中参数的顺序组织入参的List。
- jdbcTemplate.queryForObject方法直接不支持的in查询。只支持Integer.class String.class 这种单数据类型的入参。
例如:
List<Long> idList = ...;
String name = ...;
StringBuilder idListSb = new StringBuilder();
for(Long id : idList){
idListSb.append(id + ",");
}
String sql = "select count(*) from user where id in (?) and name = ?";
List<Object> objects = new ArrayList<>();
objects.add(idListSb.toString().RTrim(','));
object.add (name);
jdbcTemplate.queryForObject(sb.toString(),objects,Long.class);
而NamedParameterJdbcTemplate时,其本来就支持in查询和Map类型的入参。
List<Long> idList = ...;
String name = ...;
String sql = "select * from user where id in (:ids) and name = :name";
Map<String, Object> param = new HashMap<>();
param.put("ids", idList);
param.put("name", name);
namedParameterJdbcTemplate.queryForObject(sb.toString(),param,Long.class);