JPA+nativeQuery实现可选的筛选条件SQL

前言

最近在使用spring+jpa写一个项目,有一个需求是列表筛选,而且是可选的筛选项,如果传null就代表全选,由于是需要连接两张表查询且两张表字段都要用到,因此一般的Specification并做不到,选择了写nativeQuery的办法,所以需要在sql中进行判断。

实现

等于,大于,小于筛选条件

使用sql的if语句,如下

and if (:XXX is not null,xxx=:XXX,1=1)

xxx为mysql字段名,XXX为JPA函数的传入值,如果为空的化就采用了1=1

in筛选条件

之前的=并不适用于in,如果这么写

and if (:XXX is not null,xxx in :XXX,1=1)

会报错,因为如果是null的化sql语句就变成了

and if(null is not null,xxx in null,1=1)

其中的xxx in null不符合mysql的语法,因此需要换一个语句

and (coalesce (:XXX, null) is null or xxx in (:XXX))  

这样就可以将数组传进去了

小结

说是JPA,其实就是mysql的if用法,灵活应用后可以省去一定的代码量

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值