通常你们习惯的用法以下:spring
public List<Map<String, Object>> queryByFundid(int fundId) {
String sql = "SELECT * FROM t_freeze_detail WHERE fund_id = ? AND flag = ? AND freeze_state = ?";
return jt.queryForList(sql, new Object[]{fundId, Const.FLAG_NORMAL, FreezeDetailBean.FREEZE_STATUS_FROZEN});
}
经过问号的顺序,在jt(JdbcTemplate).queryForList后将参数对号入座。避免程序被注入。sql
可是当咱们使用in的时候,这种方法就很差用了,相信你想过,用List匹配问号。你会发现出现这种的SQL:.net
select * from user where id in ([1,2])
1
执行报错。code
下面是正确的用法:
参考资料:
https://codedump.io/share/wiR37rEpCp2X/1/how-to-pass-list-parameter-in-in-clause-using-jdbctemplate
http://www.technicalkeeda.com/spring-tutorials/spring-jdbctemplate-in-clause-exampleget
/**
* 根据条件删除
*
* @author GaoPeng
* @param freezeTypeList
* @return
*/
public int deleteRaiseRiskByCondition(int fundId, List<Integer> freezeTypeList) {it
NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jt.getDataSource());io
Map<String, Object> params = new HashMap<String, Object>();
params.put("fundId", fundId);
params.put("freezeType", freezeTypeList);class
String sql = "delete from t_freeze_detail where fund_id=:fundId and freeze_type in (:freezeType)";
return namedParameterJdbcTemplate.update(sql, params);
}
这我用了一个delete的例子,其余的相似,你们触类旁通。
程序中用了NamedParameterJdbcTemplate类,而后经过:freezeType方式进行参数的匹配。date