枚举类型group by查询各个类型的数目

这段代码展示了如何在JPA中通过SQL查询,根据QuarantineApplication的status字段进行分组并计数,返回每个状态的数量。
1.Action层
/**
 * 查询申请单各个状态记录
 *
 * @return
 */
@RequestMapping(value = "/statusRows", method = RequestMethod.GET)
@ResponseBody
public JSONObject statusRows() {

   JSONObject jsonObject = new JSONObject();

   QuarantineState[] quarantineStates = QuarantineState.values();
   List<Object> objectList = quarantineApplicationBiz.statusCounts();
   if (CollectionUtils.isNotEmpty(objectList)) {
      for (int i = 0; i < quarantineStates.length; i++) {
         boolean flag = true;
         for (Object object : objectList) {
            JSONArray jsonArray = JSONArray.fromObject(object);
            String status = getJsonString(jsonArray, 0);
            String count = getJsonToIntegerString(jsonArray, 1);
            if (status.equals(String.valueOf(i))) {
               jsonObject.put(quarantineStates[i] + "Size", count);
               flag = false;
               break;
            }
         }
         if (flag) {
            jsonObject.put(quarantineStates[i] + "Size", 0);
         }

      }
   }

   JSONObject result = ResponseJSON.Ok("查询申请表成功", jsonObject);
   return result;
}

//判断是否为空
private static String getJsonString(JSONArray ja, Integer index) {
   return "null".equals(ja.getString(index)) ? "" : ja.getString(index);
}

private static String getJsonToIntegerString(JSONArray ja, Integer index) {
   String money = "null".equals(ja.getString(index)) ? "" : ja.getString(index);
   return StringUtils.isEmpty(money) ? "0" : money;
}
2.Dao层
	
//原生sql,查询各个状态记录数
public List<Object> statusCounts() {
   String sql="select `status` ,count(*) from quarantine_application where status IS NOT NULL GROUP BY `status`";
   return entityManager.createNativeQuery(sql).getResultList();
}

//jpa的sql publicList<QuarantineApplication> status(Map<String, String> queryHash) { Stringsql="select count(*) from QuarantineApplication q group by status"; TypedQuery<QuarantineApplication>typedQuery = entityManager.createQuery(sql, QuarantineApplication.class); returntypedQuery.getResultList(); }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值