zoukankan      html  css  js  c++  java
  • 在SSH框架多表查询时聚合函数的使用

    对于SSH框架下多表查询聚合函数的问题,还真纠结了我蛮久!做出来之后,发现虽然这个问题没有特别复杂,但是要注意的东西还是有蛮多的!比如:在SSH框架下平时简单的多表查询中,我们可以通过对象来获取他的值,但是在聚合函数查询的时候,我们不能select一个对象,必须是一个具体的值!下面是我做的一个项目中有用到关于这个问题的地方,跟大家一起来分享一下!

    在dao包里面:

    //分页显示所有统计查询船舶违章的具体信息
        public List getAllBreakInformationT(final String hql, final Integer page , final Integer size, final Object ...p){
            return getHibernateTemplate().executeFind(new HibernateCallback(){
    
                public Object doInHibernate(Session session)
                        throws HibernateException, SQLException {
                    Query query = session.createQuery(hql);
                    query.setCacheable(true);
                    if (p != null) {
                        for (int i = 0; i < p.length; i++) {
                            query.setParameter(i, p[i]);
                        }
                    }
                    if ( page != null && size != null) {
                        query.setFirstResult((page-1)*size).setMaxResults(size);
                    }
                    List list = query.list();
                    return list;
                }});
        }
        //按时间、船舶船员名,违章代码统计查询的总条数
        public Integer countCheckBreak(final String bname, final String sname, final java.sql.Date sDate, final java.sql.Date lDate, final int incode) {
            return (Integer) getHibernateTemplate().execute(new HibernateCallback(){
    
                public Object doInHibernate(Session session)
                        throws HibernateException, SQLException {
                    String hql = "select count(*) from ViolationTable where 1=1";
                    StringBuffer sb=new StringBuffer(hql);
                    if(sDate!=null){
                        sb.append(" and vitime >='"+sDate+"'");
                        System.out.print("dao sdate:"+sDate);
                    }
                    if(lDate!=null){
                        sb.append(" and vitime <='"+lDate+"'");
                        System.out.print("dao ldate:"+lDate);
                    }
                    if(bname!="" && bname!=null){
                        sb.append(" and driveTable.boatTable.bchinesename like '%"+bname+"%' group by driveTable.boatTable.bchinesename");
                        System.out.print("dao bname:"+bname);
                    }
                    if(sname!="" && sname!=null){
                        sb.append(" and driveTable.sailorTable.sname like '%"+sname+"%' group by driveTable.sailorTable.sname");
                        System.out.print("dao sname:"+sname);
                    }
                    if(incode!=0){
                        sb.append(" and informationTable.incode ="+incode + "group by informationTable.incode");
                        System.out.print("dao incode:"+incode);
                    }
                    String sql=sb.toString();
                    Query query = session.createQuery(sql);
                    //query.setCacheable(true);
                    //Object object = query.uniqueResult();
                    List list=query.list();
                    System.out.print("list.size()"+list.size());
                    return list.size();
                }});
        }
        //根据船舶船员名、时间和违章代码统计查询
        public String gethqlB(final String bname, final String sname, java.sql.Date sDate, java.sql.Date lDate, int incode) {
            String hql="select count(viid),sum(informationTable.ingrade),sum(informationTable.inmoney),informationTable.incode,driveTable.boatTable.bchinesename,driveTable.sailorTable.sname from ViolationTable where 1=1";
            StringBuffer sb=new StringBuffer(hql);
            if(sDate!=null){
                sb.append(" and vitime >='"+sDate+"'");
            }
            if(lDate!=null){
                sb.append(" and vitime <='"+lDate+"'");
            }
            if(bname!="" && bname!=null){
                sb.append(" and driveTable.boatTable.bchinesename like '%"+bname+"%' group by driveTable.boatTable.bchinesename");
            }
            if(sname!="" && sname!=null){
                sb.append(" and driveTable.sailorTable.sname like '%"+sname+"%' group by driveTable.sailorTable.sname");
            }
            if(incode!=0){
                sb.append(" and informationTable.incode ="+incode + "group by informationTable.incode");
            }
            sb.append(" order by vitime desc");
            System.out.println(sb.toString());
            String sql=sb.toString();
            return sql;
        }

    在service包里面

        //根据违章代码,船舶船员名和时间统计查询
        public Map getAllChekB(String bname,String sname,Date sDate,Date lDate,int incode,int page,int size){
            String hql=violationTableDAO.gethqlB(bname, sname, sDate, lDate,incode);
            System.out.println("hql="+hql);
            //求总条数
            int num = violationTableDAO.countCheckBreak(bname, sname, sDate, lDate, incode);
            System.out.println("num="+num);
            
            //求总页数
            int count = num%size==0 ? num/size : num/size+1 ;
            
            //越界查询
            if(page<1)   page = 1;
            if(page>count)  page = count ;
            System.out.println(1234564);
            
            List vlist = violationTableDAO.getAllBreakInformationT(hql, page, size);
            System.out.println(vlist.size()+"******");
    
            List list=new ArrayList();
            for (int i = 0; i < vlist.size(); i++) { 
                Object ob[]=(Object[]) vlist.get(i);
                CountTest ct=new CountTest();
                ct.setVcount(Integer.parseInt(ob[0].toString()));
                ct.setVsum(Integer.parseInt(ob[1].toString()));
                ct.setVmoney(Double.parseDouble(ob[2].toString()));
                ct.setIncode(Integer.parseInt(ob[3].toString()));
                ct.setBchinesename(ob[4].toString());
                ct.setSname(ob[5].toString());
                System.out.println("ct-Vcount:"+ct.getVcount());
                list.add(ct);
            }
            
            Map map = new HashMap();
            
            map.put("list", list);
            map.put("page", page);
            map.put("size", size);
            map.put("num", num);
            map.put("count", count);
            
            return map;
        }

    在action包里面

        //根据船舶,船员名和日期查找违章记录
        public String checkRecord(){
            HttpServletRequest request=ServletActionContext.getRequest();
            HttpServletResponse response=ServletActionContext.getResponse();
            
            int page =1 ;
            int size = 5 ;
            String pageString = request.getParameter("page");
            if (pageString != null) 
                page = Integer.parseInt(pageString);
            
            String sizeString = request.getParameter("size");
            if(sizeString != null)
                size = Integer.parseInt(sizeString);
            
            String bname=request.getParameter("bname");
            if(bname!=null){
                bname=bname.trim().toString();
            }
            request.setAttribute("bname", bname);
            System.out.println("bname:"+bname);
            String sname=request.getParameter("sname");
            if(sname!=null){
                sname=sname.trim().toString();
            }
            request.setAttribute("sname", sname);
            System.out.println("sname:"+sname);
            String icode=request.getParameter("incode");
            int incode=0;
            if(icode!=null){
                icode=icode.trim().toString();
            }
            System.out.println(icode);
            if(icode!="" && icode!=null){
                incode=Integer.parseInt(icode);
            }
            System.out.println("incode:"+incode);
            request.setAttribute("incode", incode);
            
            String syear=request.getParameter("syear");
            String smonth=request.getParameter("smonth");
            String sday=request.getParameter("sday");
            String lyear=request.getParameter("lyear");
            String lmonth=request.getParameter("lmonth");
            String lday=request.getParameter("lday");
            
            Date sDate=null;
            if(!"".equals(syear) && syear!=null){
                System.out.println(123456);
                StringBuffer sb1=new StringBuffer();
                sb1.append(syear);
                sb1.append("-");
                sb1.append(smonth);
                sb1.append("-");
                sb1.append(sday);
                sDate=Date.valueOf(sb1.toString());
            }
            request.setAttribute("sDate", sDate);
            System.out.println("sDate:"+sDate);
            
            Date lDate=null;
            if(!"".equals(lyear) && lyear!=null){
                System.out.println(22222223);
                StringBuffer sb2=new StringBuffer();
                sb2.append(lyear);
                sb2.append("-");
                sb2.append(lmonth);
                sb2.append("-");
                sb2.append(lday);
                lDate=Date.valueOf(sb2.toString());
            }
            request.setAttribute("lDate", lDate);
            System.out.println("lDate:"+lDate);
            
            if(("".equals(bname) || bname==null) && ("".equals(sname) || sname==null) && incode==0){
                Map map=breakRecordService.getAllChek(bname, sname, sDate, lDate, incode, page, size);
                request.setAttribute("checkmap", map);
                return "CheckDate";
            }else if((!"".equals(bname) || bname!=null) && ("".equals(sname) || sname==null) && incode==0){
                System.out.println("bname进来");
                Map map=breakRecordService.getAllChekB(bname, sname, sDate, lDate, incode, page, size);
                request.setAttribute("checkmap", map);
                return "CheckBname";
            }else if(("".equals(bname) || bname==null) && (!"".equals(sname) || sname!=null) && incode==0){
                System.out.println("sname进来!");
                Map map=breakRecordService.getAllChekB(bname, sname, sDate, lDate, incode, page, size);
                request.setAttribute("checkmap", map);
                return "CheckSname";
            }else if(("".equals(bname) || bname==null) && ("".equals(sname) || sname==null) && incode!=0){
                System.out.println("incode进来!");
                Map map=breakRecordService.getAllChekB(bname, sname, sDate, lDate, incode, page, size);
                request.setAttribute("checkmap", map);
                return "CheckIncode";
            }
            return "err";
        }
  • 相关阅读:
    vue分享二维码
    Linux的软件安装
    linux命令操作
    禅道的使用方法
    测试管理工具的安装和介绍
    测试Bug
    软件缺陷和软件缺陷的种类
    测试计划和测试用例
    双肩包,椅子,电梯的测试用例
    软件生命周期的模型
  • 原文地址:https://www.cnblogs.com/xinxinjava/p/3226982.html
Copyright © 2011-2022 走看看