spring-boot - 如何将“<”,“>”,“=”等运算符(小于,大于,等于)作为参数传递给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 数据库。
谢谢你。
解决方案
如果您可以选择在运行查询之前构造/连接字符串,则没有问题:
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 '%'
即“和真实”
推荐阅读
- python-3.x - 只在一列中添加一些单元格
- python - 继续接收太多索引用于插值的数组
- python - 在 VSCode 中用 Python 执行终端命令
- blazor - 在其他 Body 元素中加载的页面内的 Body 元素内加载页面?
- c++ - 窗口的透明图像背景(使用 UpdateLayeredWindow) - Win32
- r - 有条件地对特定列的值进行行产品
- android - 构建一个root android设备的应用程序
- python - 解决 Selenium Python 启动缓慢的简单方法?
- java - 使用 Maven 构建项目的 AbsoluteLayout 出错
- javascript - 这两个数组有什么区别,如何访问我需要的属性?