如何使用JdbcTemplate中向sql的in语句中传参呢?

乔欣 Java经验 发布时间:2023-02-16 20:57:05 阅读数:1136 1
下文笔者讲述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;
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202302/16765522785812.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者