鍍金池/ 教程/ Java/ Hibernate查詢語言(HQL)
Hibernate繼承映射
Hibernate每個子類一張表(使用XML文件)實例
Hibernate快速入門
Hibernate使用注釋
Hibernate使用xml文件的每個類層次一張表
Hibernate命名查詢
Hibernate每個層次類一張表(使用注釋)
Hibernate組件映射
Hibernate事務(wù)管理
Hibernate二級緩存
集合映射Set(使用xml文件)
Hibernate每個具體類一張表映射(使用XML)
集合映射中的映射列表(使用xml文件)
Hibernate使用Log4j日志記錄(使用properties文件)
Hibernate集合映射
集合Map映射(使用xml文件)
集合Set映射一對多(使用xml文件)
Hibernate查詢語言(HQL)
Hibernate入門程序
Hibernate標(biāo)準(zhǔn)查詢語言
Hibernate使用Log4j日志記錄(使用xml文件)
Hibernate教程
Hibernate體系結(jié)構(gòu)
Hibernate生成器類
Hibernate通過many-to-one元素的一對一映射
集合Map多對多映射(使用xml文件)
Web應(yīng)用程序使用Hibernate
Hibernate一對多映射列表實例(使用xml文件)
Hibernate通過one-to-one元素的一對一映射
Hibernate每個子類一張表(使用注釋)實例
集合映射中的映射包(使用xml文件)
通過Bag一對多映射示例(使用xml文件)
Hibernate緩存
Hibernate每個具體類一張表映射(使用注釋)

Hibernate查詢語言(HQL)

Hibernate查詢語言(HQL)與SQL(結(jié)構(gòu)化查詢語言)相同,但不依賴于數(shù)據(jù)庫表。 我們在HQL中使用類名,而不是表名。 所以是數(shù)據(jù)庫獨立的查詢語言。

HQL的優(yōu)點

HQL有很多優(yōu)點。 它們?nèi)缦拢?/p>

  • 數(shù)據(jù)庫獨立
  • 支持多態(tài)查詢
  • 易于Java程序員學(xué)習(xí)

查詢接口

它是一個面向?qū)ο蟮腍ibernate Query表示。 Query的對象可以通過Session接口調(diào)用createQuery()方法。

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

  • public int executeUpdate() 用于執(zhí)行更新或刪除查詢。
  • public List list() 將關(guān)系的結(jié)果作為列表返回。
  • public Query setFirstResult(int rowno) 指定從哪里檢索記錄的行號。
  • public Query setMaxResult(int rowno) 指定從關(guān)系(表)中檢索記錄的行號。
  • public Query setParameter(int position, Object value) 它將該值設(shè)置為JDBC樣式查詢參數(shù)。
  • public Query setParameter(String name, Object value) 它將該值設(shè)置為命名查詢參數(shù)。

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與聚合函數(shù)

可以通過HQL調(diào)用avg(),min()max()等聚合函數(shù)。 我們來看一些常見的例子:

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

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總數(shù)的示例

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

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

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