首页 > 解决方案 > 向 sql 查询提供带有通配符的列值列表

问题描述

使用 Java 8、Oracle 11g 和 Spring Boot,我们通常运行 SQL 选择类似:

String sqlQuery="select col1,col2 from myTable where col1 = :colValue";
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("colValue", "xxx");
// Then run the query :
List<MyClass>= jdbcTemplate.query(sqlQuery,parameters,(rs, rowNum) -> new MyClass
      (rs.getString("col1"),rs.getString("col2"))  );   

也可以提供 col1 值的列表

String sqlQuery="select col1,col2 from myTable where col1 in ( :colList) ";
Map<String, List<String>> parameters = new HashMap<String, List<String>();
List<String> myColList= Arrays.asList("xxx", "yyy");
parameters.put("colList", myColList );

但是如果我们想在列值中包含 SQL 通配符怎么办:

String sqlQuery="select col1,col2 from myTable where col1 like ( :colList) ";
List<String> myColList= Arrays.asList("%xxx%", "yyy%");

我们不能在 where 子句中混合 LIKE 和 IN 构造,那么还有其他方法吗?我知道我可以动态构建自己的 where 子句,但我试图避免这种情况。任何指针表示赞赏。

标签: javaspring-bootoracle11g

解决方案


您可以使用MapSqlParameterSource

Set<Integer> myColList = new HashSet<>(Arrays.asList("xxx", "yyy"));
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("colList", myColList);

推荐阅读