首页 > 代码库 > 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用法)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。