java jdbc in list_spring jdbc 多List参数查询,包括包含多个 in 条件查询情况

spring jdbc 多List参数查询,包括包含多个 in 条件查询情况

其中学生类Student.java extends RowMapper :

private String name;

private String sex;

@Nullable

@Override

public Object mapRow(ResultSet rs, int i) throws SQLException {

if(metaData==null) {

metaData = rs.getMetaData();

}

Student student = new Student();

student.setName(rs.getString("name"));

student.setSex(rs.getString("sex"));

return student;

}

// 省略 get 和 set

1. 直接拼接sql语句

// 需要将字符串拼成这种形式

String names = "'张三', '李四'";

String sexes = "'男', '女'";

String sql = String.format("select * from student where name in (%s) and sex in (%s)", names, sexes);

List students = jdbcTemplate.query(sql, new Object[]{}, new Student());

但是这样会有sql注入风险,正常情况不建议这么做。

2. 使用 NamedParameterJdbcTemplate

先将sql语句更改为:

String sql = "select * from student where name in (:names) and sex in (:sexes)";

再使用MapSqlParameterSource进行参数配置,

String names = "张三, 李四";

String sexes = "男, 女";

MapSqlParameterSource parameters = new MapSqlParameterSource();

Set nameSet = new HashSet<>();

nameSet.addAll(Arrays.asList(names.split(",")));

Set sexSet = new HashSet<>();

sexSet.addAll(Arrays.asList(sexes.split(",")));

parameters.addValue("names", nameSet);

parameters.addValue("sexes", sexSet);

NamedParameterJdbcTemplate template =

new NamedParameterJdbcTemplate(jdbcTemplate.getDataSource());

List students = template.query(sql, parameters, new Student());

这样就完美解决spring jdbc中多个in的参数查询问题而不会有sql注入风险了。

附录

参考:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值