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[];,也就是很多个对象数组。
有什么疑问和建议的,欢迎交流!!共同进步!!