복붙노트

[SPRING] Spring JdbcTemplate을 통해 동적 "in (...)"SQL 목록을 생성하는 방법은 무엇입니까?

SPRING

Spring JdbcTemplate을 통해 동적 "in (...)"SQL 목록을 생성하는 방법은 무엇입니까?

Jdbc 템플릿을 통해 SQL 쿼리에 임의의 "in ()"리스트를 생성 할 수 있습니까?

예:

"select * from t where c in (#)", 그러나 '#'은 런타임에 알려진 값의 임의의 목록 일 수 있습니다.

해결법

  1. ==============================

    1.네, 명명 된 매개 변수로 NamedParameterJdbcTemplate 또는 SimpleJdbcTemplate을 사용하면 Spring에서 가능합니다. List 매개 변수는 java.util.List로 설정할 수 있습니다.

    네, 명명 된 매개 변수로 NamedParameterJdbcTemplate 또는 SimpleJdbcTemplate을 사용하면 Spring에서 가능합니다. List 매개 변수는 java.util.List로 설정할 수 있습니다.

    List<String> list = new ArrayList<String>();
    
    list.add("A");
    list.add("B");
    list.add("C");
    
    List<SomeObject> result = simpleJdbcTemplate.query("SELECT * FROM t WHERE c in (:list)",
        new RowMapper<SomeObject>() { ... },
        Collections.singletonMap("list", list));
    

    이 경우 Spring은 명명 된 매개 변수를?로 대체 할 때 실제 목록의 크기를 기반으로 필요한 수의 자리 표시자를 사용하여 SQL 쿼리를 내부적으로 만듭니다.

  2. ==============================

    2.Hibernate에서 다음 샘플을 사용할 수있다.

    Hibernate에서 다음 샘플을 사용할 수있다.

    if(tenors != null && tenors.length >0)
                sql.append(" and ip.tenor_id in (:tenors)");
    
    .....
    
    
    if(tenors != null && tenors.length >0){
        query.setParameterList("tenors", tenors);                                 
    }
    .....
    SQLQuery query = (SQLQuery) getSession().createSQLQuery(sql.toString())
    
  3. ==============================

    3.

    SimpleJDBCTemplate is depricated now. You can use NamedParameterJdbcTemplate instead. 
    

    샘플 코드는 다음과 같습니다.  다른 종류의 매개 변수가 여러 개있는 경우 Object를 키로 사용하십시오. 그렇지 않으면 List

    String sqlAllEmpl = queryLoader.getProperty("allEmployeesByLevelAndPeriod");
            Map<String, Object> paramMap = new HashMap<String, Object>();
            paramMap.put("level", levelStr);
            paramMap.put("periodList", periodList);
    
            gridList = namedParameterJdbcTemplate.query(sqlAllEmpl, paramMap, new YourRowMapper());
    

    sqlAllEmpl에는 level-string과 periodList라는 두 개의 place holder가 있습니다. 이것은 SQL의 IN 문에 사용되는리스트입니다.

  4. from https://stackoverflow.com/questions/1981683/how-to-generate-a-dynamic-in-sql-list-through-spring-jdbctemplate by cc-by-sa and MIT license