首页 > 解决方案 > 如何将“<”,“>”,“=”等运算符(小于,大于,等于)作为参数传递给springboot中的本机查询?

问题描述

例如让我的查询如下所示:

String query="select * from table_name where column_name1 > ?1 and column_name2 < ?2";

@Query(value = query, nativeQuery = true)
public List<Object[]> getResult(String filterValue1,Integer filterValue2);

如何将运算符(<,>,=)也作为参数传递?

我正在使用 postgreSQL 数据库。

谢谢你。

标签: spring-bootnativequery

解决方案


如果您可以选择在运行查询之前构造/连接字符串,则没有问题:

public String methodOne(String firstOperator
, String secondOperator) {
return "select * from table_name where column_name1 " 
+ firstOperator + " ?1 and column_name2 "
 + secondOperator +" ?2"; 
}

如果您使用 SpringData 存储库,则会更加复杂。由于 SpringData 正在查询字符串中寻找本机 SQL 运算符,因此您无法使用本机查询参数做很多事情。但是你可以尝试用 LIKE 运算符和内置函数做一些技巧(在 SQL 中,有时 >,< 可以用 LIKE 替换)

(不完全回答您的问题,但是)

可以省略的条件

 @Query(value =
... AND column_name LIKE IIF(:myParam <> '%', :myParam,'%')
<skipped>

... repositoryMethod(@Param("myParam") String myParam);

IIF - MSSQL 中的三元运算符函数,您可以在 RDBMS 中找到类似的内容

当您发送 myParam='actualValue' 时,它将被转换为

and column_name LIKE 'actualValue'

即 column_name='actualValue'

当您发送 myParam='%' 时,它将被转换为

and column_name LIKE '%'

即“和真实”


推荐阅读