SpringDataJPA原生语句查询复合结果集代码举例

2 篇文章 0 订阅

项目目前使用jpa,但是没有深入学习,之前对单表查询使用一直没有磕绊,今天碰到一个需求,需要对表进行sum,count,group操作。

习惯性用原生sql写,但是查询结果集时映射就不会了,网上查了半天,找到个文章:使用 JPQL 和原生 SQL 查询 JPA 实体(转)http://macrabbit.iteye.com/blog/855385介绍的比较到位,但是没有需要的代码示例,又查了下原生sql映射,最后代码如下:

(期间Integer类型转换遇到问题,参看:http://blog.csdn.net/u013762572/article/details/44185427)

String jpql = "SELECT uvCount.area,uvCount.phone, sum(times) as times,"

+ " sum(recommend_count) as recommend_count ,sum(register_count)as register_count "
+ " from xx_count uvCount WHERE uvCount.area like'%"+area+"%'";
if (endDate != null) {
jpql = jpql + " and uvCount.create_date <='"+DateTool.date2String(endDate)+"'";
}
jpql = jpql + " GROUP BY uvCount.phone";

List<Object[]> beanList = entityManager.createNativeQuery(jpql).setFlushMode(FlushModeType.COMMIT).getResultList();
List<UvCount> list = new ArrayList<UvCount>();
for (Object o[] : beanList) {
UvCount uv = new UvCount();
uv.setArea((String) o[0]);
uv.setPhone((String) o[1]);
if (o[2] != null) {
uv.setTimes(new Integer(String.valueOf(o[2])));
} else {
uv.setTimes(0);
}
if (o[3] != null) {
uv.setRecommendCount(new Integer(String.valueOf(o[3])));
} else {
uv.setRecommendCount(0);
}
if (o[4] != null) {
uv.setRegisterCount(new Integer(String.valueOf(o[4])));
} else {
uv.setRegisterCount(0);
}
list.add(uv);
}


感谢分享!留念!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值