`Spring JPA组合查询,根据条件查询
接手一个项目,数据库处理用的JPA,据留下这个摊子的人说很好用,大概用了一下,在一些基本的增删改查上面确实方便,不用写SQL,但今天遇到了一个稍微复杂一点的需求,之前Mybatis是用的拼接SQL语句或者在xml里面用这种方式,在JPA这里好像没这个功能,不过实现方式也不难,用SQL里面自带的IF语句就行
废话不多说,直接上代码
@Query(nativeQuery = true, value = "SELECT COUNT(1) FROM trade_info t LEFT JOIN role_info r ON t.role_id = r.id " +
"WHERE t.order_pay_state <> 1 AND r.nick_name LIKE :nickName" +
"AND IF(:platform=0, t.pay_type<>0, t.pay_type=:platform) " +
"AND IF(:maxTime=0, t.create_time IS NOT NULL, UNIX_TIMESTAMP(t.create_time) <= :maxTime) " +
"AND IF(:minTime=0, t.create_time IS NOT NULL, UNIX_TIMESTAMP(t.create_time) >= :minTime) ")
public int findFailCount(@Param("nickName") String nickName,
@Param("platform") Integer platform,
@Param("maxTime") Long maxTime,
@Param("minTime") Long minTime);
```
不过这里要注意几个点
1.如果加了@Param这个注解,那SQL里面一定要用冒号来引入参数,如 :key
2.如果没有加@Param,那需要用问号来引入参数,如 ?key