2014年1月19日 星期日

HQL 使用簡介

HQL是官方推薦的查詢語法,

有點類似SQL,

比較不同的是所使用的查詢指令,

都是依照物件的屬性和類別名稱,

必須用物件的方式來下HQL指令,

簡單的查詢指令如下:
   
   Query query = session.createQuery("from Member m");
   List<Member> list = query.list();

   for (Member m : list) {
    System.out.println(m.getName() + "\t" + m.getAge());
   }



這樣會將Member物件所屬的table,

查詢所有的資料並轉成Member物件的list,

查詢SQL如下:
select member0_.id as id11_, member0_.name as name11_, member0_.age as age11_ from member member0_

print結果:
Jeff    17
Davis    27
Tom    12
Sam    30
James    22


另外,可以用設定參數的方式下達查詢方式:
   Query query = session.createQuery("from Member m where m.name=:name");
   query.setParameter("name", "Jeff");
   
   Member jeff=(Member) query.uniqueResult();

在需要給定的參數前面加上 :

在使用setParameter方式給定參數值,

除了使用query.list()傳回List外,

也可以使用query.uniqueResult()傳回單一物件,

不過這邊要注意一點,在使用uniqueResult()時,

如果查詢的結果不是只有一筆,

會回傳org.hibernate.NonUniqueResultException的錯誤,

還有很多可以使用的函數部分:
   Query query = session.createQuery("select count(*) from Member m ");
   System.out.println(query.uniqueResult());
   query=session.createQuery("select max(m.age) from Member m");
   System.out.println(query.uniqueResult());
   query=session.createQuery("select avg(m.age) from Member m");
   System.out.println(query.uniqueResult());

輸出console:
Hibernate: select count(*) as col_0_0_ from member member0_
5
Hibernate: select max(member0_.age) as col_0_0_ from member member0_
30
Hibernate: select avg(member0_.age) as col_0_0_ from member member0_
21.6



沒有留言:

張貼留言