当hibernate返回一个类属性的对象数组时

今天看到一段使用hibernate的代码,为了统计每个部门的数据,还得先查出所有符合条件的数据,然后遍历集合,把数据中的部门全取出来,然后再重新遍历该集合,与刚才取出的部门名称作比对,名称相同的计数器加1,最后就可以得到每个部门的数据统计了。

 

      看到这里不由觉得麻烦,要是使用sql语句的话,直接写个“select  部门名称,count(*) from 表  where  条件” 不就行了。 平时使用hibernate时,写hql语句一般都习惯直接从 from开始写,返回类的集合。其实使用hibernate时,也可以从select开始写的, “select  部门名称,count(*) from 类  where  条件”,结果是返回 属性的 对象数组。 这里返回 部门名称 和 数量的数组集合。

 

       String hql = “select name, count(*) from Dept”;

          List list  = getHibernateTemplate().find(hql);

 

这里返回的是一个list,到这一步时忘了该怎么取出list中的数据了,上网查了一下,只要把list中的object对象 强转为 object[]就可以了。

 

           Object[] obj = (Object[])list;

          

   然后   String name = obj[0];

            long count = obj[1];

   再把这个数据放到一个hashmap返回页面,这样就能取到每个部门的数据了。

 

   刚才在 Object[] obj = (Object[])list; 卡住了,按照使用hibernate的惯性思维 ,要定义一个类去把list里面的数据取出来,  于是我定义了

 

public class Test {
 private String name ;
 private int count;
 
 public  Test(){}

 public String[] getName() {
  return name;
 }

 public void setName(String[] name) {
  this.name = name;
 }

 public int getCount() {
  return count;
 }

 public void setCount(int count) {
  this.count = count;
 };
 
}

去取取不出来,debug看了一下list的值,

 

看到count是Long类型的,还以为是 private int count出错呢。

 

于是修改成

 

     public class Test {
 private String[] name ;
 private Long count;
 
 public  Test(){}

 public String[] getName() {
  return name;
 }

 public void setName(String[] name) {
  this.name = name;
 }

 public Long getCount() {
  return count;
 }

 public void setCount(Long count) {
  this.count = count;
 };
 
}

    还是报类型转换出错,经过朋友提醒才发现,返回的就是个数组,用Object[]去取就行。

 

 

    忘了写一下,网上提到,返回对象数组的list,不能用Iterator去遍历了,但是我试了一下

   while(it.hasNext()){
   Object[] b = (Object[])it.next() ;
   String name = (String)b[0];
   long count = (Long)b[1];
   System.out.println(name+"  "+count);
  }

   这段代码还是能执行。不知道他说的是哪个?

 

   进公司8个多月了,基本没写代码,杂事做了很多,技术上反而退步了,把基本的core java知识都忘了,这样可不行,要重新开始 ,把基础打牢才能往上走。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值