Hibernate查詢方式
- 對象導航查詢
(1)根據id查詢某個客戶,再查詢這個客戶里面所有的聯系人 - OID查詢
(1)根據id查詢某一條記錄,返回對象 - HQL查詢
(1)Query對象,寫hql語句實現查詢 - QBC查詢
(1)Criteria對象 - 本地sql查詢
(1)SQLQuery對象,使用普通sql實現查詢
對象導航查詢
- 查詢某個客戶里面所有聯系人過程,使用對象導航實現
- 代碼
1.png
OID查詢
- 根據id查詢記錄
(1)調用session里面的get方法實現
2.png
HQL查詢
- hql:hibernate query language,hibernate提供一種查詢語言,hql語言和普通sql很相似,區別:普通sql操作數據庫表和字段,hql操作實體類和屬性
- 常用的hql語句
(1)查詢所有: from 實體類名稱
(2)條件查詢: from 實體類名稱 where 屬性名稱=?
(3)排序查詢: from 實體類名稱 order by 實體類屬性名稱 asc/desc - 使用hql查詢操作時候,使用Query對象
(1)創建Query對象,寫hql語句
(2)調用query對象里面的方法得到結果
查詢所有
- 查詢所有客戶記錄
(1)創建Query對象,寫hql語句
(2)調用query對象里面的方法得到結果 - 查詢所有: from 實體類名稱
1.png
條件查詢
- hql條件查詢語句寫法:
(1) from 實體類名稱 where 實體類屬性名稱=? and實體類屬性名稱=?
from 實體類名稱 where 實體類屬性名稱 like ? - 代碼
2.png
模糊查詢
3.png
排序查詢
- hql排序語句寫法
(1)from 實體類名稱 order by 實體類屬性名稱 asc/desc
4.png
分頁查詢
- mysql實現分頁
(1)使用關鍵字 limit實現
SELECT * FROM S_MENU LIMIT 0,3;
- 在hql中實現分頁
(1)在hql操作中,在語句里面不能寫limit,hibernate的Query對象封裝兩個方法實現分頁操作
5.png
投影查詢
- 投影查詢:查詢不是所有字段值,而是部分字段的值
- 投影查詢hql語句寫法:
(1)select 實體類屬性名稱1, 實體類屬性名稱2 from 實體類名稱
(2)select 后面不能寫 * ,不支持的 - 具體實現
6.png
聚集函數使用
- 常用的聚集函數
(1)count、sum、avg、max、min - hql聚集函數語句寫法
(1)查詢表記錄數
select count(*) from 實體類名稱
7.png
QBC查詢
- 使用hql查詢需要寫hql語句實現,但是使用qbc時候,不需要寫語句了,使用方法實現
- 使用qbc時候,操作實體類和屬性
- 使用qbc,使用Criteria對象實現
查詢所有
- 創建Criteria對象
- 調用方法得到結果
8.png
條件查詢
沒有語句,使用封裝的方法實現
9.png
10.png
排序查詢
1.png
分頁查詢
2.png
開始位置計算公式: (當前頁-1)*每頁記錄數
統計查詢
離線查詢
- servlet調用service,service調用dao
(1)在dao里面對數據庫crud操作
(2)在dao里面使用hibernate框架,使用hibernate框架時候,調用session里面的方法實現功能
4.png
HQL多表查詢
Mysql里面多表查詢
內連接
5.png
左外連接
6.png
右外連接
7.png
HQL實現多表查詢
Hql多表查詢
(1)內連接
(2)左外連接
(3)右外連接
(4)迫切內連接
(5)迫切左外連接
#######HQL內連接
- 內連接查詢hql語句寫法:以客戶和聯系人為例
(1)from Customer c inner join c.setLinkMan
8.png
返回list,list里面每部分是數組形式
- 演示迫切內連接
(1)迫切內連接和內連接底層實現一樣的
(2)區別:使用內連接返回list中每部分是數組,迫切內連接返回list每部分是對象
(3)hql語句寫法
from Customer c inner join fetch c.setLinkMan
9.png
#######HQL左外連接
左外連接hql語句:
(1)from Customer c left outer join c.setLinkMan
(2)迫切左外連接from Customer c left outer join fetch c.setLinkMan左外連接返回list中每部分是數組,迫切左外連接返回list每部分是對象
右外連接hql語句:
(1)from Customer c right outer join c.setLinkMan