Sql语句关于in的预编译传值使用

  • 关于in在现在版本中大部分使用是这样的
    Integer[] goodsIds = new Integer[]{1,2,3};
    String str = StringUtil.arrayToString(goodsIds, ",")
    String sql = "select * from es_order where sn in ("+str")";
    daoSupport.queryForList(sql);
    
  • 上面的使用方式是错误的, 正确使用方式是如下
    Integer[] goodsIds = new Integer[]{1,2,3};
    List<Object> term = new ArrayList<>();
    String[] goods = new String[goodsIds.length];
    for(int i = 0 ; i<goodsIds.length; i++ ){
      goods[i] = "?";
      term.add(goodsIds[i]);
    }
    String str = StringUtil.arrayToString(goods, ",");
    String sql = "select * from es_goods where goods_id in ("+str+")";
    daoSupport.queryForList(sql,term.toArray());
    

如果sql语句的条件中还需要传递其他预编译值,也需要将其他的值放到term集合中。

daoSupport.queryForList("select * from es_goods where goods_id in ("+str+") and seller_id = ? ",
term.toArray(),1);

以上格式查询会报错。
应该写成

term.add(1);
daoSupport.queryForList("select * from es_goods where goods_id in ("+str+") and seller_id = ? ",
term.toArray());

results matching ""

    No results matching ""