java - 不使用命名参数时重用 sql 参数
问题描述
我有一个使用 JdbcTemplate 调用的查询,但只发送了一个参数,我需要在两个 where 条件下使用该参数。
查询
String sql = "select * from employee where salary > ? and netpay > ?";
召唤
这里的参数只有一个。IE如果id是TEST123
查询需要
select * from employee where id = TEST123 and name = TEST123
即使一个参数正在通过。
getJdbcTemplate().query(sql, new Object[]{"TEST123"}, CustomResultSetExtractor());
有没有办法从查询端做到这一点而不是传递两个参数?
笔记
我无权更改调用查询的方式,因此我无法添加命名参数,或者只是传递一个附加参数。
解决方案
使用NamedParameterJdbcTemplate,一个 JdbcTemplate 包装器:
具有一组基本 JDBC 操作的模板类,允许使用命名参数而不是传统的“?” 占位符。
一旦从命名参数替换为 JDBC 样式“?”,此类将委托给包装的 JdbcTemplate 占位符在执行时完成。
您的 SQL 将带有 1 个参数:
select * from employee where id = (:id) and name = (:id)
代码将是:
MapSqlParameterSource args = new MapSqlParameterSource();
args.addValue("id", TEST123);
return new NamedParameterJdbcTemplate(getJdbcTemplate()).query(sql , args, youRowMapper);
如果无法更改,可以将查询更改为:
select * from employee where id = ? and id = name
推荐阅读
- c# - 按钮 onclick 是否有一般事件?
- loops - AHK 循环 CPU 使用率过高
- c# - SCIM API (C#) 用于将用户从 Azure AD 预配到 SaaS 应用程序
- .htaccess - htaccess 文件 url 重写未创建所需的 url
- lit-element - 无法从 MDCTextField 导入 CSS 以在基于 LitElement 的 WebComponent 中设置 MDCTextField 子元素的样式
- git - 如何撤消最后一次拉取和提交
- python - 如何使用一列按数据分组对另一列执行一些操作并分配新组熊猫
- r - 在 R 中用异常值连续缩放 ggplot 中的 y 轴
- java - 如何使用 MigLayout 在 java swing 中制作聊天(whatsapp 之类)ui
- angular - 本地主机:4200 在电话上