今天看到一段使用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知識都忘了,這樣可不行,要重新開始 ,把基礎打牢才能往上走。