JdbcTemplate进行带in条件SQL语句查询返回集合
在使用Spring jdbcTemplate时,使用in作为条件查询时,碰到一点问题。直接使用jdbcTemplate进行查询会将集合类型的参数解析成多个问号?拼接成的占位符,将集合变成字符串的话,MySQL会报错提示Truncated incorrect DOUBLE value。
试过多种处理方案后,发现可以借助org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate来进行转换后即可
Demo代码
.
@Override
public List<UserExamRecordGradeExamIdAndExamStatusDTO> countByInGradeExamId(List<Long> gradeExamIdList) {
String sql = "select grade_exam_id, exam_status, count(1) as count from user_exam_record where grade_exam_id in ( :gradeExamIdList ) group by grade_exam_id, exam_status";
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("gradeExamIdList", gradeExamIdList);
NamedParameterJdbcTemplate paramJdbcTemp = new NamedParameterJdbcTemplate(jdbcTemplate);
return paramJdbcTemp.query(sql, paramMap, (resultSet, i) -> {
UserExamRecordGradeExamIdAndExamStatusDTO record = new UserExamRecordGradeExamIdAndExamStatusDTO();
record.setCount(resultSet.getInt("count"));
record.setExamStatus(resultSet.getInt("exam_status"));
record.setGradeExamId(resultSet.getLong("grade_exam_id"));
return record;
});