是否有可能 “在()” 中通过JDBC模板中的SQL查询列表生成任意:如何通过Spring JdbcTemplate生成动态“in(...)”sql列表?
例如:
“选择T *,其中c在(#)”,但是 '#' 可能是仅在运行时已知的值的任意列表。
是否有可能 “在()” 中通过JDBC模板中的SQL查询列表生成任意:如何通过Spring JdbcTemplate生成动态“in(...)”sql列表?
例如:
“选择T *,其中c在(#)”,但是 '#' 可能是仅在运行时已知的值的任意列表。
是的,如果您使用带有命名参数的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));
在这种情况下,春季内部创建与所需数量的基础上与?
小号更换命名参数在实际列表的大小的占位符的SQL查询。
如果您的IN(...)参数不是字符串(文本),则这不起作用。例如,如果你想以这种方式传递一个List
在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())
问题不是关于Hibernate,而是Spting JDBC模板 – 2013-08-16 08:42:18
SimpleJDBCTemplate is depricated now. You can use NamedParameterJdbcTemplate instead.
示例代码如下。 如果您有不同类型的多个参数,你可以 使用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语句。
可能的重复[如何有效地执行Spring的JDBCTemplate的IN()SQL查询?](http://stackoverflow.com/questions/1327074/how-to-execute-in-sql-queries-with-springs- jdbctemplate-effectivly) – Adam 2012-02-29 00:50:41