【问题标题】:Usage of "IN" keyword in Spring boot JDBC template [duplicate]Spring boot JDBC模板中“IN”关键字的使用[重复]
【发布时间】:2021-09-29 23:41:45
【问题描述】:

我在 Spring Boot 中有这个查询,在 dao 类之一中。

查询

String sql = select * from language where screen = ? and lang = ? and screenid in (?)

请求对象

{
    "language" : {
         "screen" : "Index",
         "lang": "english",
         "screenid" : ["250","10","44","11"]
    }
}

我获取来自 JSON 请求的每个值并将其存储到 bean 中。

问题

screenid 有字符串值数组,我如何在查询中传递它?

我试过了,

String ids = LangObj.get("screenid").toString();
// this gives the value as ["250","10","44","11"]

当直接将此值传递给查询时,它的形式为select * from language where screen = 'Index' and lang = 'english' and screenid in (["250","10","44","11"]),因此没有给出任何输出,我正在寻找一个如下所示的查询,

select * from language where screen = 'Index' and lang = 'english' and screenid in ('250','10','44','11')

有什么建议吗?

【问题讨论】:

    标签: java postgresql spring-boot spring-jdbc


    【解决方案1】:

    请检查此文档:

    https://www.baeldung.com/spring-jdbctemplate-in-list

    示例代码:

    List<Employee> getEmployeesFromIdList(List<Integer> ids) {
        String inSql = String.join(",", Collections.nCopies(ids.size(), "?"));
     
        List<Employee> employees = jdbcTemplate.query(
          String.format("SELECT * FROM EMPLOYEE WHERE id IN (%s)", inSql), 
          ids.toArray(), 
          (rs, rowNum) -> new Employee(rs.getInt("id"), rs.getString("first_name"), 
            rs.getString("last_name")));
    
        return employees;
    }
    

    【讨论】:

    • 问题SQL包含另外2个参数,所以没那么简单。
    猜你喜欢
    • 2020-02-16
    • 1970-01-01
    • 2018-08-10
    • 2018-02-11
    • 2022-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多