gpt4 book ai didi

spring - 在 NamedParameterJDBCTemplate 中绑定(bind) ORDER BY 的参数

转载 作者:行者123 更新时间:2023-12-03 05:24:33 26 4
gpt4 key购买 nike

我正在尝试在 Spring MVC 应用程序中使用 NamedParameterJdbTemplate。问题是,当我包含下面列出的 ORDER BY 子句之一时,绑定(bind)参数似乎不起作用(没有排序发生)。但是,SQL 中按列名称硬编码的顺序是有效的。

ORDER BY column1 
ORDER BY column1
ORDER BY column1 asc
ORDER BY column1 desc

例如,下面列出的查询不起作用。

    private static final String SEARCH_ALL_BY_SORT_ORDER=
" select FIRST_NM, MIDDLE_NM, LAST_NM, CUSTOMER_IDENTIFIER, EMAIL_ADDRESS, ACCOUNT_ID" +
" from VIEW " +
" where CUSTOMER_IDENTIFIER= :customerIdentifier " +
" and ( REGEXP_LIKE(FIRST_NM, :firstName, 'i') " +
" or REGEXP_LIKE(LAST_NM, :lastName, 'i') " +
" or REGEXP_LIKE(EMAIL_ADDRESS, :emailAddress, 'i') )" +
" order by :sortColumns";

具有按列硬编码顺序的相同查询有效:

    private static final String SEARCH_ALL_BY_SORT_ORDER=
" select FIRST_NM, MIDDLE_NM, LAST_NM, CUSTOMER_IDENTIFIER, EMAIL_ADDRESS, ACCOUNT_ID" +
" from VIEW " +
" where CUSTOMER_IDENTIFIER= :customerIdentifier " +
" and ( REGEXP_LIKE(FIRST_NM, :firstName, 'i') " +
" or REGEXP_LIKE(LAST_NM, :lastName, 'i') " +
" or REGEXP_LIKE(EMAIL_ADDRESS, :emailAddress, 'i') )" +
" order by LAST_NM";

这是相关的jdbctemplate代码

Map <String, Object> params = new HashMap <String, Object>();
params.put("customerIdentifier", customerIdentifier);
params.put("firstName", searchCriteria );
params.put("lastName", searchCriteria );
params.put("emailAddress",searchCriteria);
// sortBy is COLUMN name
// sortOrder is either 'asc' or 'desc'
params.put("sortColumns", sortBy + " " + sortOrder);
// Using just the column name does not work either
//params.put("sortColumns", sortBy);

namedParameterJdbcTemplate.query(SEARCH_ALL_BY_SORT_ORDER, params, new MemberMapper());

最佳答案

只有值可以绑定(bind)为参数。不是查询本身的一部分。

最终生成一条prepared语句,并将参数绑定(bind)到prepared语句上。准备好的语句的原理是准备查询的执行计划(其中 order by 子句是其中的一部分),然后使用不同的参数执行一次或多次查询。

如果查询不完整,则无法准备和重用执行计划。因此,对于这部分查询,您需要使用字符串连接而不是参数动态生成查询。

关于spring - 在 NamedParameterJDBCTemplate 中绑定(bind) ORDER BY 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11658834/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com