• HQL分页查询、分组查询


    1、环境

    Spring Data JPA、Spring Boot

    2、利用HQL实现动态条件、分页查询。

    (1)DAO中的定义

        /**
         *  分页查询预警信息(注:三个对象并无建立对象引用关系,即对应表之间并没有建立外键关联,只是存储了ID值)
         * @param yjfl 预警分类
         * @param yjjb 预警级别
         * @param bq 标签
         * @param beginDate 预警时间(开始时间)
         * @param endDate 预警时间(结束时间)
         * @param xm 人员姓名
         * @param gmsfzhm 公民身份证号码
         * @param pid 人员ID
         * @param pageable 分页信息
         * @return
         */
        @Query(
                value = "select t,p from WarningInfo t, BigRelation b, Person p"
                    + " where t.id = b.ktId"
                    + " and b.ztId = p.id"
                    + " and (t.yjfl = ?1 or ?1 is null)"
                    + " and (t.yjjb = ?2 or ?2 is null)"
                    + " and (t.bq like ?3 or ?3 is null)"
                    + " and (t.sj >= ?4 or ?4 is null)"
                    + " and (t.sj <= ?5 or ?5 is null)"
                    + " and b.gx = 'GX_R_YJXX_ZT'"
                    + " and (p.xm like ?6 or ?6 is null)"
                    + " and (p.gmsfzhm = ?7 or ?7 is null)"
                    + " and (p.id = ?8 or ?8 is null)"
                    + " order by ?#{#pageable}", 
    
                      countQuery = 
                          "select count(*) from WarningInfo t, BigRelation b, Person p"
                        + " where t.id = b.ktId"
                        + " and b.ztId = p.id"
                        + " and (t.yjfl = ?1 or ?1 is null)"
                        + " and (t.yjjb = ?2 or ?2 is null)"
                        + " and (t.bq like ?3 or ?3 is null)"
                        + " and (t.sj >= ?4 or ?4 is null)"
                        + " and (t.sj <= ?5 or ?5 is null)"
                        + " and b.gx = 'GX_R_YJXX_ZT'"
                        + " and (p.xm like ?6 or ?6 is null)"
                        + " and (p.gmsfzhm = ?7 or ?7 is null)"
                        + " and (p.id = ?8 or ?8 is null)"
                        + " order by ?#{#pageable}"
                        
                  )
        Page<Object[]> findWarningInfo(String yjfl, String yjjb, String bq, Date beginDate, 
        Date endDate, String xm, String gmsfzhm, Long pid, Pageable pageable);

    (2)调用示例

        public Result queryYj(final WarningInfoVo vo)
        {
            Sort sort = new Sort("desc".equals(vo.getOrder())?Direction.DESC:Direction.ASC, vo.getSort()); // 排序
            Pageable pageable = new PageRequest(vo.getPage() - 1, vo.getRows(), sort); // 分页查询条件
            
            String yjfl = vo.getYjfl();    //预警分类
            String yjjb = vo.getYjjb();    //预警级别
            String bq = vo.getBq();    //标签
            String xm = vo.getXm();    //人员姓名
            String gmsfzhm = vo.getGmsfzhm();    //公民身份证号码
            String sj_start = vo.getSj_start();    //开始时间
            String sj_end = vo.getSj_end();    //结束时间
                    
            //条件加工
            if(!xx.isEmpty(bq))
            {
                bq = "%," + bq + ",%";
            }
    
            if(!xx.isEmpty(xm))
            {
                xm = "%" + xm + "%";
            }
            
            Date beginDate = null;
            if(!xx.isEmpty(sj_start))
            {
                beginDate = xx.toDate(sj_start);
            }
            
            Date endDate = null;
            if(!xx.isEmpty(sj_end))
            {
                endDate = xx.toTime(sj_end + " 23:59:59");
            }
            
            // 查询        
            Page<Object[]> page = dao.findWarningInfo(yjfl, yjjb, bq, beginDate, endDate, xm, gmsfzhm, null, pageable);
    
            //转换构建列表数据
            List<Object[]> arrList = page.getContent();
            List<WarningInfoDto> list = new ArrayList<>(arrList.size());
            for(Object[] arr: arrList)
            {
                list.add(new WarningInfoDto((WarningInfo)arr[0], (Person)arr[1]));
            }
            
            //构建返回结果
            Result result =new Result();
            result.setRows(list);
            result.setTotal(page.getTotalElements());        
            return result;        
        }    

    3、分组查询

    (1)DAO中的定义

        @Query("select count(*) as num, t.hy as hy from  DataResource t where t.state.code='06'group by t.hy order by t.hy.orderNum ")
        List<Object> findGroupByHy();
        
        @Query("select count(*) as num, t.yw as yw from  DataResource t where t.state.code='06' group by t.yw order by t.yw.orderNum")
        List<Object> findGroupByYw();

    (2)调用示例

      public List<StatisticsVo> statisticsThisLv1Group(boolean isYw) 
      { List
    <StatisticsVo> list = new ArrayList<>(); if (isYw) {//业务 List<Object> _list = dao.findGroupByYw(); for(Object row:_list) { Object[] cells = (Object[]) row; Long num = (Long) cells[0]; CodeBusinessType sort = (CodeBusinessType) cells[1]; System.out.println(sort.getName()+" "+num); StatisticsVo vo = new StatisticsVo(); vo.setCount(num); vo.setCode(sort.getId() + ""); vo.setName(sort.getName()); list.add(vo); } } else {//行业 List<Object> _list = dao.findGroupByHy(); for(Object row:_list) { Object[] cells = (Object[]) row; Long num = (Long) cells[0]; CodeIndustry sort = (CodeIndustry) cells[1]; System.out.println(sort.getName()+" "+num); StatisticsVo vo = new StatisticsVo(); vo.setCount(num); vo.setCode(sort.getId() + ""); vo.setName(sort.getName()); list.add(vo); } } return list; }
  • 相关阅读:
    Menu-actionBarMenu字体颜色修改
    actionBarTab-actionBarTab自定义 布局没法改变其中字体相对中间的位置
    Funui-overlay 如何添加theme 的 overlay
    java进阶——反射(Reflect)
    java工具类学习整理——集合
    Java实例练习——java实现自动生成长度为10以内的随机字符串(可用于生成随机密码)
    打通Java与MySQL的桥梁——jdbc
    SQL数据库操作整理
    PhpStorm 4.0 & 5.0 部署本地Web应用
    PhpStorm 4.0 & 5.0 部署本地Web应用
  • 原文地址:https://www.cnblogs.com/rulian/p/12527316.html
Copyright © 2020-2023  润新知