首页 > 代码库 > hiberante对象方式的投影操作与sql语句的投影方式(聚集函数的hibernate用法)

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

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

 

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