如果在执行的SQL中需要用到 in ,则建议使用 NamedParameterJdbcTemplate 进行处理。
public NamedParameterJdbcTemplate(DataSource dataSource)
public NamedParameterJdbcTemplate(JdbcOperations classicJdbcTemplate)
JdbcOperations 是一个接口, 常用的 JdbcTemplate 就是 实现了这个接口,所以我正可以正常的使用 JdbcTemplate 进行 构造 NamedParameterJdbcTemplate
SQL的形式 :select * from t_user where id in (:ids);
传入的ids 为 List 类型。
// id 集合
List<Integer> ids = new ArrayList<>();
ids.add(3);
ids.add(1);
MapSqlParameterSource parameters = new MapSqlParameterSource();
// 传参
parameters.addValue("ids", ids);
第一种方式:
@Autowired
private JdbcTemplate jdbcTemplate;
@GetMapping("/queryUsersByIds")
@ApiOperation(value = "查询用户列表")
public List<User> queryUsersByIds() {
String sql = "select * from t_user where id in (:ids);";
// id 集合
List<Integer> ids = new ArrayList<>();
ids.add(3);
ids.add(1);
MapSqlParameterSource parameters = new MapSqlParameterSource();
// 传参
parameters.addValue("ids", ids);
NamedParameterJdbcTemplate givenParamJdbcTemp = new NamedParameterJdbcTemplate(jdbcTemplate);
List<User> data = givenParamJdbcTemp.query(sql, parameters, new RowMapper<User>() {
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
// TODO Auto-generated method stub
User user = new User();
user.setId(rs.getLong("id"));
user.setUserName(rs.getString("user_name"));
user.setRemark(rs.getString("remark"));
return user;
}
第二种方式:
@Component
public class HealthcheckDao {
@Resource(name="namedParameterJdbcTemplate")
private NamedParameterJdbcTemplate jdbcN;
/**
* private JdbcTemplate jdbcT;
* @param List<String> idList
* @param 参数说明
*/
public void batchUpdate(List<String> idList){
String sql = "update table_name set del_flag = '0' where uuid in (:ids)";
try {
//参数必须要用jdbc提供的 MapSqlParameterSource.addValue(String arg0 ,Object value)方法添加
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("ids", idList);
int n = jdbcN.update(sql, parameters);
} catch (DataAccessException e) {
e.printStackTrace();
}
}