为了账号安全,请及时绑定邮箱和手机立即绑定

如何有效地使用Spring的JDBCTemplate执行IN()SQL查询?

/ 猿问

如何有效地使用Spring的JDBCTemplate执行IN()SQL查询?

慕瓜9086354 2019-08-26 10:41:14

如何有效地使用Spring的JDBCTemplate执行IN()SQL查询?

我想知道是否有一种更优雅的方式来使用Spring的JDBCTemplate进行IN()查询。目前我做的是这样的:

StringBuilder jobTypeInClauseBuilder = new StringBuilder();for(int i = 0; i < jobTypes.length; i++) {
    Type jobType = jobTypes[i];

    if(i != 0) {
        jobTypeInClauseBuilder.append(',');
    }

    jobTypeInClauseBuilder.append(jobType.convert());}

这是非常痛苦的,因为如果我有九行只是为IN()查询构建子句。我想要像准备语句的参数替换


查看完整描述

3 回答

?
胡子哥哥

你想要一个参数来源:

Set<Integer> ids = ...;MapSqlParameterSource parameters = new MapSqlParameterSource();parameters.addValue("ids", ids);List<Foo> foo = getJdbcTemplate().query("SELECT * FROM foo WHERE a IN (:ids)",
     parameters, getRowMapper());

这仅在getJdbcTemplate()返回类型的实例时有效NamedParameterJdbcTemplate


查看完整回答
反对 回复 2019-08-26
?
繁花不似锦

请参阅此处


使用命名参数编写查询,ListPreparedStatementSetter对所有参数依次使用simple 。只需添加以下代码段即可将传统形式的查询转换为可用参数,

ParsedSql parsedSql = NamedParameterUtils.parseSqlStatement(namedSql);

    List<Integer> parameters = new ArrayList<Integer>();
    for (A a : paramBeans)
        parameters.add(a.getId());

    MapSqlParameterSource parameterSource = new MapSqlParameterSource();
    parameterSource.addValue("placeholder1", parameters);
    // create SQL with ?'s
    String sql = NamedParameterUtils.substituteNamedParameters(parsedSql, parameterSource);

    return sql;


查看完整回答
反对 回复 2019-08-26
?
qq_遁去的一_1

自2009年以来,许多事情发生了变化,但我只能找到答案,说你需要使用NamedParametersJDBCTemplate。

对我来说,如果我只是做一个,它就有用

db.query(sql, new MyRowMapper(), StringUtils.join(listeParamsForInClause, ","));

使用SimpleJDBCTemplate或JDBCTemplate


查看完整回答
反对 回复 2019-08-26

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信