java - 向 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 子句,但我试图避免这种情况。任何指针表示赞赏。
解决方案
您可以使用MapSqlParameterSource
Set<Integer> myColList = new HashSet<>(Arrays.asList("xxx", "yyy"));
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("colList", myColList);
推荐阅读
- c# - 在两个日期之间搜索并使用 xml 文件中的日期填充数据网格
- php - 为消息表加入用户表
- arduino - 如何在 arduino 中为 lcd 编写自己的库?
- http - 将服务器发送事件与 HTTP2 一起使用时,是否仍有实际的 6 个连接限制?
- css - 如何修复 @each 指令的这个 SCSS 编译错误?
- css - Primefaces数据表上的stickyHeader在layoutUnit中显示重复的标题
- reactjs - 对象作为 React 子对象无效(找到:带键的对象 {
})。如果您打算渲染一组孩子,请改用数组 - android - Rxjava 和 OkHttp 请求
- twilio - Twilio TaskRouter.js 更新活动或保留导致错误 403(定义的策略使我们无法访问给定资源)
- r - .Call("dplyr_rbind_list__impl", PACKAGE = "dplyr", dots) 中的错误