Это можно сделать с помощью PreparedStatementSetter
( JavaDoc )
Учитывая запрос
select * from mytable where user_id > ?
Вы можете использовать
jdbcTemplate.query(query,
new PreparedStatementSetter() {
@Override
public void setValues(final PreparedStatement ps) throws SQLException {
ps.setInt(1, userId);
ps.setFetchSize(500);
}
},
new RowCallbackHandler() {
@Override
public void processRow(final ResultSet rs) throws SQLException {
...
}
});
Или в более компактной форме
jdbcTemplate.query(
query,
ps -> {
ps.setInt(1, userId);
ps.setFetchSize(500);
},
rs -> { ... }
);
Имейте в виду, что
Реализация отвечает за установку любых необходимых параметров.
SQL с заполнителями уже будет предоставлен.
Для одного результирующего объекта используйте
public <T> T query(String sql,
PreparedStatementSetter pss,
ResultSetExtractor<T> rse) throws DataAccessException;
метод. Например
jdbcTemplate.query(
query,
new ArgumentPreparedStatementSetter(new Object[] {balanceId}),
rs -> {
final String field1 = rs.getString("field1");
// Get other fields and construct the resulting object
return new YourClass(field1, ...);
}
);