用到的地方比较多,所以写成了一个方法放进了工具类
/**
* pretreatmentConditions(): 为查询条件进行预处理,防止SQL注入
* 使用场景: 字段 in(?,?,?..)
*/
public List<Object> pretreatmentConditions(String dept) {
List<Object> paraList = new ArrayList<Object>();
List<Object> list = new ArrayList<Object>();
StringBuilder tempBuilder = new StringBuilder();
String[] value = dept.split(",");
for (int i = 0; i < value.length; i++) {
tempBuilder.append("?,");
paraList.add(value[i]);
}
//上面的for循环结束后最后会多一个逗号,所以在这里手动加入一个'x',因为要查的字段里面没有x,所以不影响结果
tempBuilder.append("\'x\'");
list.add(tempBuilder);
list.add(paraList);
return list;
}
在implement中调用方法pretreatmentConditions()
public int test(Map<String, Object> map) {
List<Object> paraList = new ArrayList<Object>();
List<Object> deptList = sUtil.pretreatmentConditions(department);
String deptSql = deptList.get(0).toString();
List<Map<String, Object>> tempList = (List<Map<String, Object>>) deptList.get(1);
sql语句的结尾处加上查询条件
一段sql......
if (!department.isEmpty()) {
builder.append("\n and to_char(s.dept) in(")
.append(deptSql).append(")");
paraList.addAll(tempList);
}
return getJdbcTemplate().queryForInt(builder.toString(), paraList.toArray());