JdbcTemplate使用?占位符,查询带in条件的sql

概述

使用JdbcTemplate,采用占位符写法,防sql注入攻击,带有in条件的处理

拼接方法

	/**
	 * <pre>
	 * 获取 PreparedStatement 需要的in sql 子句
	 * 如:
	 * 空集合:('')
	 * [1, 2, 3] (?,?,?)
	 * </pre>
	 * @param params
	 * @return
	 */
	public static String getInClauseStr(Collection<String> params) {
		StringBuilder inClause = new StringBuilder("(");
		boolean last = false;
		if (params == null || params.isEmpty()) {
			inClause.append("'')");
			return inClause.toString();
		}
		else {
			for (int i = 0; i < params.size(); i++) {
				inClause.append("?");
				if (i == params.size() - 1) {
					last = true;
				}
				// 最后一个占位符不需要逗号
				if (!last) {
					inClause.append(",");
				}

			}
			inClause.append(")");
			return inClause.toString();
		}
	}

查询语句:

List<String> list = Arrays.asList("1", "2", "3");
String query = "select * from User where user_id in  " + getInClauseStr(list);

Object[] params = new Object[0];
if (list != null && !list.isEmpty()) {
    params = list.toArray();
}
List<Map<String, Object>> list = jdbcTemplate.queryForList(query, params);

参考

JavaRanch Journal - October 2005 Volume 4 Issue 2

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值