Hibernate查詢語言(HQL)與SQL(結(jié)構(gòu)化查詢語言)相同,但不依賴于數(shù)據(jù)庫表。 我們在HQL中使用類名,而不是表名。 所以是數(shù)據(jù)庫獨立的查詢語言。
HQL有很多優(yōu)點。 它們?nèi)缦拢?/p>
它是一個面向?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");