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

时间:2018-12-20 07:24:27

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

我正在创建自定义JPQL查询以获取一些数据。 在某些情况下,我想根据参数值是否为非null添加一个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;

有人可以帮我吗?

2 个答案:

答案 0 :(得分:0)

两个查询:

//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;

答案 1 :(得分:0)

来吧,JPQL只是正常的String :) 您想要这样的东西吗?

private String generateHql(String status) {
String jpql = "SELECT sum(A.sal) FROM TABLE A ";
if (null != status) {
 jpql += "WHERE A.STATUS = " +status ;
}
jpql += " GROUP BY A.CURRENCY "
return jpql;
}