mysql - Spring Data JPQL 如何使用动态where子句创建查询?

标签 mysql spring-boot spring-data-jpa spring-data

我正在创建自定义 JPQL 查询来获取一些数据。 在某些情况下,我想根据参数值是否非空添加一个 where 子句。

例如等效的 SQL 查询:

//If parameter status is not null.
SELECT sum(A.sal) FROM TABLE A WHERE A.STATUS = 'X' GROUP BY A.CURRENCY;

//else
SELECT sum(A.sal) FROM TABLE A GROUP BY A.CURRENCY;

有人可以帮我吗?

最佳答案

两个查询:

//If parameter status is not null.
SELECT sum(A.sal) FROM TABLE A WHERE A.STATUS = 'X' GROUP BY A.CURRENCY;

//else
SELECT sum(A.sal) FROM TABLE A GROUP BY A.CURRENCY;

可以压缩为一。

首先让我们声明一个命名参数statusParam。此参数可以采用任何值(例如上面的 'X'null)。因此上面的两个查询可以重写为:

SELECT sum(A.sal) FROM A WHERE (A.STATUS = :statusParam OR :statusParam is null ) GROUP BY A.CURRENCY;

关于mysql - Spring Data JPQL 如何使用动态where子句创建查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53864092/

相关文章:

java - 如何防止基于正在使用的 Activity spring 配置文件执行 CommandLineRunner run() 方法?

java - Spring Boot,从 websocket 调用 ControllerLinkBuilder.linkTo 时出现 java.lang.IllegalStateException

java - Spring Data Repository - 方法签名

spring - SQL 错误 : 23503, SQLState : 23503 in SpringBoot 2. 1.4.RELEASE 应用程序

mysql - #1075 MySQL 错误

mysql - phpmyadmin - 类别作为数据库名称?

mysql - 如果已经存在时间,我如何验证时间?

mysql - 为什么人们在新数据库的列中保存 X 的计数?

java - Mockito 如何测试 findById() 返回一个 Optional

java - 具有自定义集合属性的 JPA 投影