zoukankan      html  css  js  c++  java
  • hiberante对象方式的投影操作与sql语句的投影方式(聚集函数的hibernate用法)

    hiberante对象方式的投影操作与sql语句的投影方式(聚集函数的hibernate用法)

     

    最近用到了hibernate的投影,写日记出来记录一下。

    (⊙o⊙)… 前提:搭配好hibernate环境了。 myclass指的是已经映射好的实体类

    如下3个函数是我写来测试投影的方法:   此三个方法我写在basedao中(基础dao类,做常用dao操作)

     1   /**
     2      * 斌临城下增加!
     3      * <p/>
     4      * ---(⊙o⊙)…
     5      * <p/>
     6      * *
     7      */
     8     public <T> List<T> getTouYingList_min(String []s, Class<T> myClass)
     9     {
    10         Criteria c=getSession().createCriteria(myClass);
    11         ProjectionList p=Projections.projectionList();
    12         for(int i=0;i<s.length;i++)
    13         {
    14           p.add(Projections.max(s[i]));
    15         }
    16         List l=c.setProjection(p).list();
    17         return l;
    18     }
    19     public <T> List<T> getTouYingList_max(String []s, Class<T> myClass)
    20     {
    21         Criteria c=getSession().createCriteria(myClass);
    22         ProjectionList p=Projections.projectionList();
    23         for(int i=0;i<s.length;i++)
    24         {
    25             p.add(Projections.max(s[i]));
    26         }
    27         List l=c.setProjection(p).list();
    28         return l;
    29     }
    30 
    31     public List getSQLqueryColumnList(String sql)
    32     {
    33         List l=getSession().createSQLQuery(sql).list();
    34         return l;
    35 
    36     }

    -----------》用法:

    第一个方法显然是计算列最小值的方法。传入的String数组代表你需要计算的列命,此方法是我写的专门求最小值的。 至于通用方法,可以用第三种sql语句的方法。

     1   public void testTouting()      //投影哦
     2     {
     3         String []s={"trafficMoney","foodMoney"};
     4 
     5         List l=baseDao.getTouYingList_min(s, Expense.class);
     6 
     7         Iterator i=l.iterator();
     8         while(i.hasNext())                     //投影测试 查出各投影字段,并形成一个数组。 有多条结果组成了对象数组呀!
     9         {
    10             Object[] o=(Object[])i.next();
    11             System.out.println("交通最少金额"+o[0]);
    12             System.out.println("饮食最少金额"+o[1]);
    13         }
    14 
    15         }

    第二个方法求最大值。

     1   public void testTouting()      //投影哦
     2  2     {
     3  3         String []s={"foodMoney","carMoney"};
     4  4 
     5  5         List l=baseDao.getTouYingList_max(s, Expense.class);
     6  6 
     7  7         Iterator i=l.iterator();
     8  8         while(i.hasNext())                     //投影测试 查出各投影字段,并形成一个数组。 有多条结果组成了对象数组呀!
     9  9         {
    10 10             Object[] o=(Object[])i.next();
    11 11             System.out.println("饮食最大金额"+o[0]);
    12 12             System.out.println("车辆使用最大金额"+o[1]);
    13 13         }
    14 14 
    15 15         }

    第三个方法应用:

     1 1   String DateSql="select min(accountDate),max(accountDate),sum(case when isInvoice=1 then money else 0 end) as invoiceMoney where rigisteruser='wuhuanbin"
     2 
     3         List listForMoney=baseDao.getSQLqueryColumnList(Moneysql);   //获取所得值得list
     4 
     5         Iterator moneyIterator=listForMoney.iterator();             //得到迭代器
     6         Object[] o=(Object[])moneyIterator.next();              //每一个结果是一个对象数组,这里应该只有一条结果,因为聚集成一条了。
     7         System.out.println("起始日期"+o[0]+" 终止日期"+o[1]);
     8 
     9         totalmoeny=Double.parseDouble(o[2].toString());
    10  
    11         System.out.println("有发票总金额"+o[3]);

    这里假如没有聚集的话,比如你查出select *  结果则是一个个对象数组Object o[];,也就是很多个对象数组。

    有什么疑问和建议的,欢迎交流!!共同进步!!

  • 相关阅读:
    博客园-随笔分类批量修改
    【读书笔记】--少有人走的路①:心智成熟的旅程
    自定义菜单用例
    自定义菜单创建接口
    发送消息---被动回复用户消息
    接收消息----接收语音识别结果
    接收消息----接收事件推送
    微信开发入门教程
    Hadoop维护IPC链接
    Hadoop建立IPC连接和数据读写
  • 原文地址:https://www.cnblogs.com/xiancai5210/p/3957951.html
Copyright © 2011-2022 走看看