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[];,也就是很多个对象数组。

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

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。