如何使用JdbcTemplate中向sql的in语句中传参呢?
下文笔者讲述JdbcTemplate向in里面传参数的方法分享,如下所示
如:
今天上班接到一个需求, 需一次查询多个id在指定表的数据 那么这种需求,在sql编写中,我们只需in语句即可 在Java中如何使用JdbcTemplate实现这一需求呢?下文笔者将一一道来,如下所示
使用 NamedParameterJdbcTemplate 即可传入类似in效果的数据
JdbcTemplate常规写法
public class User {
private Long id;
private String name;
private String dept;
//省略 toString, getters and setters
}
使用JdbcTemplate访问一批数据
//常规写法
public list<User> queryByFundid(int fundId) {
String sql = "select * from User where id = ?";
Map<String, Object> args = new HashMap<>();
args.put("id", 32);
return jdbcTemplate.queryForList(sql, args , User.class );
}
但是这种方法,我们查询要么传入Integr.class 要么传入String.class
如果需查询多个id时
就会出现
select * from User where id in ([1,32])
这种sql,这种sql运行时,会报错
此时我们需采用NamedParameterJdbcTemplate获取批量数据
如:
@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(8);
ids.add(10);
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;
}
});
return data;
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


