有點類似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
沒有留言:
張貼留言