如何用动态where子句创建查询?

flmtquvp  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(245)

我正在创建定制的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;

有人能帮我吗。

8qgya5xd

8qgya5xd1#

拜托,jpql只是普通的字符串:)你想要这样的东西吗?

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;
}
kb5ga3dv

kb5ga3dv2#

两个查询:

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

相关问题