【发布时间】:2018-12-06 18:50:05
【问题描述】:
假设我有一个 sql 查询,我想按不同的列进行排序。但是我想单独做。
例如,当用户只想按名字排序时,我想运行
Select .... from table order by firstName
当用户只想按姓氏排序时,我想运行
Select .... from table order by lastName
等等。我有大约 100 个columns,我不想创建 100 个sql files 并将字符串传递给jdbcTemplate 的queryForList 方法。那么有没有一种有效的方法呢?如果我有一个所有 100 列的枚举,它与数据库中真实列的名称完全匹配,我可以以某种方式将此字符串作为我想要排序的元素传递吗?
我尝试通过执行类似的操作来使用 namedParameterJdbcTemplate
Select .... from table order by :query
在我的 java 代码中,我做到了
// njdbc stands for namedParameterJdbcTemplate
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("query","firstName");
njdbc.queryForList(sql, params);
但它给了我一个绑定错误,因为我没有绑定一个值,而是绑定了真正的 sql 语法。
我想到的另一种方法是实际使用简单的 java 字符串操作(如替换方法)将 :query 替换为我的列名(例如 firstName)。但是,这不是正确的方法,因为这很容易发生 sql 注入。
注意:为简洁起见,删除了很多 sql 语法。我也在使用 sql-server 以防万一。但是,我认为解决方案与数据库无关。
【问题讨论】:
-
使用 JDBCTemplate 中的 Bind 变量将不起作用。您需要使用基于 JPA 的查询。关注此链接petrikainulainen.net/programming/spring-framework/…
标签: sql-server spring sorting sql-order-by jdbctemplate