Hibernate查詢語言(HQL)


Hibernate查詢語言(HQL)與SQL(結構化查詢語言)相同,但不依賴於資料庫表。 我們在HQL中使用類名,而不是表名。 所以是資料庫獨立的查詢語言。

HQL的優點

HQL有很多優點。 它們如下:

  • 資料庫獨立
  • 支援多型查詢
  • 易於Java程式員學習

查詢介面

它是一個物件導向的Hibernate Query表示。 Query的物件可以通過Session介面呼叫createQuery()方法。

查詢介面提供了很多方法。下面給出了一些最常用的方法:

  • public int executeUpdate() 用於執行更新或刪除查詢。
  • public List list() 將關係的結果作為列表返回。
  • public Query setFirstResult(int rowno) 指定從哪裡檢索記錄的行號。
  • public Query setMaxResult(int rowno) 指定從關係(表)中檢索記錄的行號。
  • public Query setParameter(int position, Object value) 它將該值設定為JDBC樣式查詢引數。
  • public Query setParameter(String name, Object value) 它將該值設定為命名查詢引數。

HQL獲取所有記錄的範例

Query query=session.createQuery("from Emp");//here persistent class name is Emp  
List list=query.list();

HQL獲取分頁記錄的範例

Query query=session.createQuery("from Emp");  
query.setFirstResult(5);  
query.setMaxResult(10);  
List list=query.list();//will return the records from 5 to 10th number

HQL更新查詢範例

Transaction tx=session.beginTransaction();  
Query q=session.createQuery("update User set name=:n where id=:i");  
q.setParameter("n","Udit Kumar");  
q.setParameter("i",111);  

int status=q.executeUpdate();  
System.out.println(status);  
tx.commit();

HQL刪除查詢範例

Query query=session.createQuery("delete from Emp where id=100");  
//specifying class name (Emp) not tablename  
query.executeUpdate();

HQL與聚合函式

可以通過HQL呼叫avg()min()max()等聚合函式。 我們來看一些常見的例子:

獲得所有員工總薪酬的例子

Query q=session.createQuery("select sum(salary) from Emp");  
List<Integer> list=q.list();  
System.out.println(list.get(0));

獲得員工最高工資的例子

Query q=session.createQuery("select max(salary) from Emp");

獲得員工最低工資的例子

Query q=session.createQuery("select min(salary) from Emp");

計算雇員ID總數的範例

Query q=session.createQuery("select count(id) from Emp");

獲得員工的平均工資的例子

Query q=session.createQuery("select avg(salary) from Emp");