jdbcTemplate in 查询 带(?)解决方法

众所周知,jdbcTemplate 的查询可以通过 ? 方法,带查询参数方式实现,一来语句更加简洁,不用拼凑字符串方式,而来还可以防止SQL注入,但是碰到in查询 采用 多个参数 

select * from a where in (?)

方式的就存在问题了,经过反复试验,网上解决方法用的是另外一个namejdbcTemplate来解决,但是本人还是喜欢jdbcTemplate,经过反复摸索,其实in(?)方式还是可以实现,只是要固定?查询参数

比如

#对于两个参数写法

pSelectSql =select * from a where in (?,?)


jdbcTemplate.query(pSelectSql, 类 , 参数1,参数2)

#3个参数

pSelectSql =select * from a where in (?,?,?)

以此类推

但是这样写法十分麻烦,就写了一个工具实现类,具体解决方案如下


工具类


/**
 * in 查询 SQL组合类
 * 使用用法
 * SqlConditionIn in = new SqlConditionIn();
 *      in.addValue(xxxx);
 *
 *     if (in.isIn()) {
 *                 strCondition += " and b_unit_id in (" + in.getConditions() + ")";
 *                 args.addAll(in.getObjs());
 *             }
 */
public class SqlConditionIn {
    private String conditions="";
    private List<Object> objs = new ArrayList<>();

    /**
     * 是否组成in条件
     * @return
     */
    public boolean isIn()
    {
        if (objs.size()>0)
            return true;
        else
            return false;
    }

    public void addValue(Object ob)
    {
        objs.add(ob);
        if (!conditions.equals(""))
            conditions+=",?";
        else
            conditions="?";
    }

    public String getConditions() {
        return conditions;
    }


    public List<Object> getObjs() {
        return objs;
    }


}

 具体使用方式

List<Object> args = new ArrayList<>();



//写入in c查询参数
for (BUnitUserinfoEO bUnitUserinfoEO : list) {
                //ids+=",'"+bUnitUserinfoEO.getB_unit_id()+"'";
                in.addValue(bUnitUserinfoEO.getB_unit_id());
}


//组合sql
String sql=“select * from a where 1=1

if (in.isIn()) {
     strCondition += "and b_unit_id in (" + in.getConditions() + ")";
     args.addAll(in.getObjs());
     sql+=strCondition;
 }


//查询
jdbcTemplate.query(sql, 类 , args.toArray());

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在使用Spring jdbcTemplate进行in查询时,可以借助org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate来进行转换。通过使用NamedParameterJdbcTemplate,我们可以将集合类型的参数作为命名参数传递给SQL查询。在SQL语句中,可以使用冒号(:)来引用这些命名参数,以提供更灵活的查询方式。在代码中,可以使用`paramMap.put("gradeExamIdList", gradeExamIdList)`来将集合参数gradeExamIdList传递给SQL查询,并在SQL语句中使用`:gradeExamIdList`来引用它。这样就可以解决使用jdbcTemplate进行in查询时出现的问题。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [JdbcTemplate进行in条件SQL语句查询返回集合](https://blog.csdn.net/qq979147923/article/details/114386109)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [SpringBoot交互数据库JdbcTemplate](https://download.csdn.net/download/weixin_38677808/14039870)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值