具体是实现是使用NamedParameterJdbcTemplate。
NamedParameterJdbcTemplate是Jdbctemplate的一个封装类,支持命名参数的特性。
使用NamedParameterJdbcTemplate实现预编译的IN操作:
public List<String> testGetPerson(){
JdbcTemplate jdbc = getJdbc();
NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbc);
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("names", Arrays.asList("tom", "rose"));
List<Person> list= namedParameterJdbcTemplate.query("SELECT * FROM person WHERE name in (:names)",parameters, new RowMapper<Person>() {
@Override
public Person mapRow(ResultSet rs, int rowNum) throws SQLException {
Person person= new Person();
person.setName(rs.getString(2));
person.seAge(rs.getInt(3));
return person;
}
});
System.out.println(list);
}
public List<String> testGetPerson(){
JdbcTemplate jdbc = getJdbc();
NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbc);
String sql = "SELECT * FROM person WHERE name in (:names)";
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("names", Arrays.asList("tom", "rose"));
List<Map<String, Object>> list = namedParameterJdbcTemplate.queryForList(sql, parameters);
System.out.println(list);
}
另外当然也可以使用Jdbctemplate,根据In参数的个数拼装占位符(?)的个数实现预编译。