是否可以通过Jdbc模板在SQL查询中生成任意的“in ()”列表:
例如:
“select * from t where c in (#)”,然而“#”可能是一个仅在运行时已知的任意值列表。
是否可以通过Jdbc模板在SQL查询中生成任意的“in ()”列表:
例如:
“select * from t where c in (#)”,然而“#”可能是一个仅在运行时已知的任意值列表。
如果您使用NamedParameterJdbcTemplate
或SimpleJdbcTemplate
和命名参数,那么在Spring中是可以实现的。列表参数可以设置为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));
?
。(rs,rowNum) -> {...}
代替new RowMapper <SomeObject>(){...}
。 - gaoagongSimpleJDBCTemplate现在已经过时了。您可以使用NamedParameterJdbcTemplate代替。
以下是示例代码。
如果您有多个不同类型的参数,可以使用Object
作为键,否则请使用您的List<T>
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
- 字符串和 periodList
- 用于 sql 中 IN 语句的列表。
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())