spring - JdbcTemplate条件in的SQL写法

一般大家习惯的用法如下:

    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后将参数对号入座。避免程序被注入。

但是当我们使用in的时候,这种方法就不好用了,相信你想过,用List匹配问号。你会发现出现这种的SQL:

select * from user where id in ([1,2])

执行报错。

下面是正确的用法:
参考资料:
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-example

    /**
     * 根据条件删除
     * 
     * @author GaoPeng
     * @param freezeTypeList
     * @return
     */
    public int deleteRaiseRiskByCondition(int fundId, List<Integer> freezeTypeList) {

        NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jt.getDataSource());

        Map<String, Object> params = new HashMap<String, Object>();
        params.put("fundId", fundId);
        params.put("freezeType", freezeTypeList);

        String sql = "delete from t_freeze_detail where fund_id=:fundId and freeze_type in (:freezeType)";
        return namedParameterJdbcTemplate.update(sql, params);
    }

这我用了一个delete的例子,其他的类似,大家举一反三。
程序中用了NamedParameterJdbcTemplate类,然后通过:freezeType方式进行参数的匹配。

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值