Hibernate框架的HQL

Hibernate框架的HQL

一、HQL是什麼

1.HQL(Hibernate Query Language)是hibernate提供的一種查詢語言,HQL語言和普通SQL很相似。
(1)HQL與SQL的區別:
SQL:操作表和字段。
HQL:操作實體類和屬性。

2.常用的HQL語句
(1)查詢所有:from 實體類名稱。
(2)條件查詢:from 實體類名稱 where 屬性名稱=?
(2)排序查詢:from 實體類名稱 order by 屬性名稱 asc/desc

3.使用HQL查詢操作的時候,使用Query對象
(1)通過session.createQuery(String)生成Query對象,參數爲 HQL語句。
(2)調用query對象的query.list()方法得到結果列表。

二、查詢所有

1.查詢所有記錄
(1)通過session.createQuery(String)生成Query對象,參數爲 HQL語句。
(2)調用query對象的query.list()方法得到結果列表。
2.代碼:

//通過session.createQuery(String)生成Query對象,參數爲 HQL語句
Query query = session.createQuery("from User");
//調用query對象的query.list()方法得到結果列表。
List<User> ulist = query.list();
//遍歷 
for(User user:ulist){
//輸出user表中的id和name
	System.out.println(user.getId() +"::"+user.getName());
}

三、條件查詢

1.條件查詢
(1)通過session.createQuery(String)生成Query對象,參數爲 HQL語句。
(2)設置條件值。
(3)調用query對象的query.list()方法得到結果列表。
2.HQL條件查詢語句寫法
(1) from 實體類名稱 where 實體類屬性名稱1=? and 實體類屬性名稱2=?
from 實體類名稱 where 實體類屬性名稱1 like ?
3.代碼
<1>普通查詢

//1.得到query對象。
//參數hql:from 實體類名稱 where 實體類屬性名稱1=? and 實體類屬性名稱2=?
Query query = session.createQuery("from User u where u.id=? and u.name=?");
//2.向?裏設置值
//第一個參數:int類型代表?的位置,?的位置從0開始
//第一個參數:具體參數值
query.setParameter(0,1);
query.setParameter(1,"TOM");
//3.調用query對象的query.list()方法得到結果列表。
List<User> ulist = query.list();

<2>模糊查詢

//1.得到query對象。
Query query = session.createQuery("from User u where u.name like ?");
//2.向?裏設置值
query.setParameter(0,"%TO%");
//3.調用query對象的query.list()方法得到結果列表。
List<User> ulist = query.list();

四、排序查詢

1.HQL排序語句寫法
(1) from 實體類名稱 order by 實體類的屬性名稱

2.代碼

Query query = session.createQuery("from User order by age");
List<User> ulist = query.list();

五、分頁查詢

1.mysql中的分頁

//第一個參數:開始位置
//第二個參數:每頁顯示幾條數據
select * from user limit 0,3;

2.在HQL中實現分頁
(1)在HQL操作中,在語句裏不能寫limit,hibernate的Query對象封裝了兩個方法實現分頁操作

3.代碼

//1.得到查詢所有的query對象。
Query query = session.createQuery("from User");
//2.設置分頁的數據
//2.1設置開始的位置
query.setFirstResult(0);
//2.2設置每頁記錄數
query.setMaxResults(3);
//3.調用query對象的query.list()方法得到結果列表。
List<User> ulist = query.list();

六、投影查詢

1.投影查詢:不查所有字段值,只查詢部分的字段值
2.投影查詢HQL語句寫法
(1)select 實體類屬性名稱1,實體類屬性名稱2 from 實體類名稱。
(2)select 後面不能寫 * ,不支持。
3.代碼

//1.得到query對象。
Query query = session.createQuery("select name from User");
//2.調用query對象的query.list()方法得到結果列表。注:泛型不是User對象了。
List<Object> nameList = query.list();

七、聚合函數

1.常用的聚合函數
(1)count,sum,avg,max,min
2.HQL聚合函數寫法
(1)查詢表記錄數
select count(*) from User

3.代碼

//1.得到query對象。
Query query = session.createQuery("select count(*) from User");
//2.調用query對象的query.uniqueResult()直接返回對象形式
Object obj = query.uniqueResult();
//不能直接變int,首先把Object型變成long型,再變成int型
Long lobj = (Long)obj;
int count = lobj.intValue();
//輸出
System.out.println(count);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章