今天看到一段使用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知识都忘了,这样可不行,要重新开始 ,把基础打牢才能往上走。