我想知道是否有一种更优雅的方法可以使用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()查询的子句.我希望有一些类似于预准备语句的参数替换

推荐答案

您需要参数源:

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的实例时才有效

Java相关问答推荐

Proguard配置以保留具有参数的注释的成员

在Java 8之后,HashMap的最坏情况下时间复杂度仍然是O(n)而不是O(log n)?

Java:根据4象限中添加的行数均匀分布行的公式

如何在返回bigint []值的子查询中使用any?

Exe4j创建的应用程序无法再固定在任务栏Windows 11上

如何在Spring Java中从数据库列中获取JSON中的具体数据

用户填充的数组列表永不结束循环

如何将其他属性引用到log4j2 yaml配置中?

对字符串长度进行排序,但颠倒了顺序(最长字符串在前)

解析方法";javax/imageio/metadata/IIOMetadata.getAsTree(Ljava/lang/String;)Lorg/w3c/dom/Node时加载约束冲突

是否有一个Java Future实现可以在池繁忙时在调用者线程中执行?

具有多个模式的DateTimeForMatter的LocalDate.parse失败

从12小时开始的日期模式

在Java泛型中使用通配符时,如何推断类型

Java List有一个在一个位置添加多个元素的方法,但我找不到一个在一个位置删除多个元素的方法

使用Java线程进行并行编程

Spring Mapstruct如何获取Lazy初始化实体字段的信息?

这是JavaFX SceneBuilder的错误吗?

始终使用Spring Boot连接mongodb上的测试数据库

Springboot应用程序无法识别任何@RestController或@Service,我认为@Repository也无法识别