spring data jpa 查询参数为空的问题

tianshenglong 2015-01-09 05:41:41
public interface PosAccountRecordRepository extends JpaRepository<PosAccountRecord, String> {

List<PosAccountRecord> findTop3ByposAccountIdAndRecordTypeOrderByRecordTimeDesc(final String posAccountId, final int recordType);
@Query(value="SELECT "
+ "SUM(pos.AMOUNT) sumamount, COUNT(1) sumcount, pos.RECORD_TYPE FROM "
+ "POS_ACCOUNT_RECORD pos "
+ "GROUP BY pos.RECORD_TYPE ",nativeQuery=true)
List<Object[]> findPosAccountCollect();


@Query(value="SELECT "
+ "SUM( IF ( pos.RECORD_TYPE = 0, pos.AMOUNT,0 ) ) AS sumincomeamount, "
+ "SUM( IF ( pos.RECORD_TYPE = 1, pos.AMOUNT,0 ) ) AS sumoutgoamount, "
+ "SUM( IF ( pos.RECORD_TYPE = 0, 1,0 ) ) AS sumincomecount, "
+ "SUM( IF ( pos.RECORD_TYPE = 1, 1,0 ) ) AS sumoutgocount "
+ "FROM POS_ACCOUNT_RECORD pos "
+ "where 1=1 "
+ "and pos.RECORD_TIME <= STR_TO_DATE(:a,'%Y-%m-%d') ",nativeQuery=true)
List<Object[]> findPosAccountSumCollect(@Param(value = "a") String a);
}

代码如上,在执行 上述的 findPosAccountSumCollect 方法时,如果参数a为空,就不执行 where中 带参数a的查询条件,哪位知道怎么弄啊!在线等~
...全文
9019 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
码农~三少 2018-10-16
  • 打赏
  • 举报
回复 1
可以试一试这里的两种方法: (1)@Query( value = "SELECT * FROM sys_customer WHERE 1=1 " + " AND if(:name!='',name LIKE CONCAT('%',:name,'%'),1=1)", nativeQuery = true) (2)@Query(value = "SELECT * FROM sys_customer WHERE 1=1 "+ " AND (name LIKE CONCAT('%',:name,'%') OR :name IS NULL )", nativeQuery = true) List<Customer> findDate(@Param("name") String name);
mendel_liang 2016-07-25
  • 打赏
  • 举报
回复
http://leobluewing.iteye.com/blog/1969621 楼主快看,这个链接中的描述可解决这样的问题。
ddd_kkk 2016-03-17
  • 打赏
  • 举报
回复
解决了吗?楼主
永不感冒患者 2015-04-25
  • 打赏
  • 举报
回复
LZ 我想问下关于 @query 里面写原生sql 返回的结果集 如果我的结果集是对应两个实体 该怎么接? 真心求教
StoneSea_L 2015-01-21
  • 打赏
  • 举报
回复
引用 4 楼 tianshenglong 的回复:
引用 1 楼 lsh632006375 的回复:
写两个方法 一个带where条件 在参数不为空的时候调用,另一个不带where条件,在参数为空的时候调用
那如果有10个查询条件呢,我是不是要写100个方法?
有一种mybatis的感觉你又要自己构造sql 而且还不能使用对象去查,感觉jpa满足不了啊
tianshenglong 2015-01-16
  • 打赏
  • 举报
回复
引用 1 楼 lsh632006375 的回复:
写两个方法 一个带where条件 在参数不为空的时候调用,另一个不带where条件,在参数为空的时候调用
那如果有10个查询条件呢,我是不是要写100个方法?
浪里花 2015-01-13
  • 打赏
  • 举报
回复
这种需求只能写2个方法来重载了,和一楼的说的一样
一万个小时 2015-01-12
  • 打赏
  • 举报
回复
之前写过类似的,我是用StringBuffer来写sql语句,如果参数a不为空,则调用stringbuffer的append方法把查询的sql追加上去
StoneSea_L 2015-01-12
  • 打赏
  • 举报
回复
写两个方法 一个带where条件 在参数不为空的时候调用,另一个不带where条件,在参数为空的时候调用

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧