前台传的字符串是A,B 后台要把字符串写到sql里,所以字符串要转为'A','B' sql写成in('A','B'),怎么转?查询用的JdbcTemplate,或者还有什么比较好的方案嘛,小弟感激不尽
google的CharMatcher和Strings工具类
public List<TypePriceInfo> listTypePriceByProductIds(List<Long> productIds) {
String sqlInParam = CharMatcher.is(',').trimFrom(Strings.repeat("?,", productIds.size()));
String sql = BASE_TYPE_PRICE_INFO_SQL + "where p.product_id in(" + sqlInParam + ")";
List<TypePriceInfo> priceInfos = jdbcTemplate.query(sql, productIds.toArray(), typePriceInfoRowMapper);
if (priceInfos == null) {
return Collections.emptyList();
} else {
return priceInfos;
}
}
使用NamedParameterJdbcTemplate访问一批数据
public List<Type> queryByFundid(int fundId) {
String sql = "select * from employee where id in (:ids);
List<String> ids = new ArrayList<>();
ids.add('3');
ids.add('32');
args.put("ids", ids);
NamedParameterJdbcTemplate givenParamJdbcTemp = new NamedParameterJdbcTemplate(jdbcTemplate);
List<Type> data = givenParamJdbcTemp.queryForList(sql, args, Type.class);
return data;
}
public static void main(String[] args) {
String sql = "你的sql in ";
String str = "A,B";
String[] split = str.split(",");
String inCondition = "(";
for (String string : split) {
inCondition += "'"+string+"',";
}
inCondition = inCondition.substring(0,inCondition.length()-1)+")";
sql += inCondition;
System.out.println(sql);
}
其实这个根本就不用转的吧,sql是可以识别的呀