Is it possible to generate arbitrary \"in ()\" lists in a SQL query through Jdbc template:
example:
\"select * from t where c in (#)\" , However \'#\' could
SimpleJDBCTemplate is depricated now. You can use NamedParameterJdbcTemplate instead.
Sample code is below.
If you have multiple parameters of different kind you can
use Object
as key, otherwise use your 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());
your sqlAllEmpl will have two place holders, level
- string and periodList
- which is a list used in the IN statement of sql.
In Hibernate , you can use following sample:
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())
Yes, it's possible in Spring if you use NamedParameterJdbcTemplate
or SimpleJdbcTemplate
with named parameters. List parameter can be set as a 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));
In this case Spring internally creates the SQL query with the required number of placeholders based on the size of the actual list when replacing named parameters with ?
s.