根据前台传值的数量动态插入?,?..

用到的地方比较多,所以写成了一个方法放进了工具类

    /**
     * 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());
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容