如何使用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; }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。