版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第三章 Hibernate查詢上節(jié)回顧 多對(duì)多雙向關(guān)聯(lián)主要內(nèi)容 HQL的高級(jí)應(yīng)用 帶參查詢 連接查詢 HQL優(yōu)化本講目標(biāo) HQL高級(jí)應(yīng)用 掌握帶參查詢 掌握連接查詢 熟悉命名查詢Hibernate Hibernate 查詢操作 Hibernate 支持兩種主要的查詢方式 HQL(Hibernate Query Languge,Hibernate 查詢語言)查詢 是一種面向?qū)ο蟮牟樵冋Z言,其中沒有表和字段的概念,只有類、對(duì)象和屬性的概念 HQL 是應(yīng)用較為廣泛的方式 Criteria 查詢 又稱為“對(duì)象查詢”,它用面向?qū)ο蟮姆绞綄?gòu)造查詢的過程做了封裝HQL簡(jiǎn)介 HQL Hibernate Qu
2、ery Language Hibernate查詢語言 HQL是Hibernate官方推薦的Hibernate檢索方式,它使用類似SQL的查詢語言語法,以面向?qū)ο蟮姆绞綇臄?shù)據(jù)庫中查詢。 可以使用HQL查詢具有繼承、多態(tài)和關(guān)聯(lián)關(guān)系的數(shù)據(jù)。在檢索數(shù)據(jù)時(shí)應(yīng)優(yōu)先考慮使用HQL方式。為什么使用HQLHQL 使用HQL 可以避免使用JDBC 查詢的一些弊端 不需要再編寫繁復(fù)的SQL 語句,針對(duì)實(shí)體類及其屬性進(jìn)行查詢 查詢結(jié)果是直接存放在List 中的對(duì)象,不需要再次封裝 獨(dú)立于數(shù)據(jù)庫,對(duì)不同的數(shù)據(jù)庫根據(jù)Hibernate dialect 屬性的配置自動(dòng)生成不同的SQL 語句執(zhí)行select/update/d
3、elete from Entity where group by having order by如何使用HQLHQL 使用HQL需要四步 得到Session 編寫HQL語句 創(chuàng)建Query對(duì)象 Query接口是HQL 查詢接口。它提供了各種的查詢功能 執(zhí)行查詢,得到結(jié)果 設(shè)置別名(alias) s 是Street 的別名,通過as 關(guān)鍵字指定,關(guān)鍵字as 是可選的from Street as sfrom Street sHQL基本語法 Query接口 org.hibernate.Query 通過session.createQuery(String hql)獲取Query接口的實(shí)例 與sessi
4、on.load()和session.get()相比,Query提供了更為強(qiáng)大的查詢功能 Hibernate通用的分頁實(shí)現(xiàn) 命名參數(shù) 返回可滾動(dòng)的結(jié)果集等String hql = “from Student”;/注意Student為類名不是表名Query query = session.createQuery(hql);List list = query.list();HQL基本應(yīng)用 From語句的使用 HQL : from Student From為HQL關(guān)鍵字,不區(qū)分大小寫 注意的是Student不是表名,而是類名wherewhere子句 where 子句指定限定條件 通過與SQL 相同的比
5、較操作符指定條件 如: =、=、=,!=,=等 如: is null,is not null,in,between and,like等 如:and和or 如:all,any,exists等 如:算術(shù)運(yùn)算符:+,-,*,/等HQL基本應(yīng)用 Order by子句使用 HQL中 order by和SQL中的order by相同,應(yīng)用與排序 排序的選項(xiàng): asc 升序 desc 降序HQL基本應(yīng)用 Group by子句 Having 子句HQL基本操作 刪除操作 HQL:Delete from Student where id = 10 執(zhí)行刪除操作調(diào)用Query接口的executeUpate()方法
6、 然后提交事務(wù) 更新操作 HQL:update Student set age = 20,name=李四 where id = 20 執(zhí)行更新操作調(diào)用Query接口的executeUpdate()方法 然后提交事務(wù)HQL進(jìn)階應(yīng)用 以下介紹HQL的高級(jí)應(yīng)用 HQL連接查詢 HQL命名查詢(綁定參數(shù)) HQL配置文件中定義查詢語句 HQL連接查詢 HQL支持的連接類型有: inner join outer join full joinHQL進(jìn)階應(yīng)用 HQL連接查詢 內(nèi)連接 inner join HQL:from Clazz cls inner join cls.students where cls
7、.id = 10 連接查詢返回的結(jié)果為Object類型的數(shù)組,數(shù)組的第一個(gè)元素為Clazz對(duì)象,第二個(gè)元素是與之對(duì)應(yīng)的Student對(duì)象HQL進(jìn)階查詢 HQL外連接 外連接分為: 左外連接 HQL:from Clazz cls left join cls.students 右外連接 HQL:from Clazz cls right join cls.studentsHQL進(jìn)階應(yīng)用 命名查詢 HQL:from Student where name = :stuName 使用Query接口一系列的setter方法為命名查詢賦值,如:query.setString(“stuName”,”章明”) 優(yōu)
8、點(diǎn): 避免繁瑣的HQL拼接 避免SQL注入 參數(shù)綁定 與PerparedStatement類似參數(shù)綁定 “?”占位符 使用“?”作占位符,可以先設(shè)定查詢參數(shù) 通過setType()方法設(shè)置指定的參數(shù) 必須保證每個(gè)占位符都設(shè)置了參數(shù)值 必須依照“?”所設(shè)定順序設(shè)定 下標(biāo)從0開始,而不是使用PreparedStatement 對(duì)象時(shí)的從1開始/省略代碼省略代碼String hql =select u.password from User as u where = ?;Query query = session.createQuery(hql);query.setString(0, a
9、dmin); /省略代碼省略代碼參數(shù)綁定 封裝參數(shù) 動(dòng)態(tài)設(shè)置查詢參數(shù) 將參數(shù)封裝為一個(gè)bean 通過Query 對(duì)象的setProperties(Object bean)實(shí)現(xiàn)參數(shù)的設(shè)定public class QueryProperties private String title; /標(biāo)題標(biāo)題 private Double high_price; /價(jià)格最高值價(jià)格最高值 private Double low_price; /價(jià)格最低值價(jià)格最低值 private String type_id; /房屋類型編號(hào)房屋類型編號(hào) private String street_id; /街道編號(hào)街道編號(hào)
10、private Integer small_floorage; /面積最小值面積最小值 private Integer big_floorage; /面積最大值面積最大值 /省略省略setter 和和getter 方法方法封裝參數(shù)的封裝參數(shù)的beanStringBuffer queryString = new StringBuffer();queryString.append(from House where );queryString.append(title like :title) );queryString.append(and (street_id like :street_id)
11、);queryString.append(and (type_id like :type_id) );queryString.append(and (price between :low_price and :high_price) );queryString.append(and(floorage between :small_floorage and :big_floorage) );HQL語句語句/ 省略部分代碼省略部分代碼Query query = session.createQuery(queryString.toString();query.setProperties(qp);Li
12、st list = query.list();/ 省略部分代碼省略部分代碼執(zhí)行查詢執(zhí)行查詢命名查詢 元素用于定義一個(gè)HQL 查詢語句,它和元素并列 以方式保存HQL 語句 在程序中通過Session 對(duì)象的getNamedQuery()方法獲取該查詢語句 HQL進(jìn)階應(yīng)用 在配置文件中定義HQLHQL進(jìn)階應(yīng)用 使用Query接口限制每次取回對(duì)象的個(gè)數(shù) Query接口提供了兩個(gè)方法,限制每次取出對(duì)象的個(gè)數(shù) setFirstResult(int firstResult) 用于設(shè)置從哪個(gè)對(duì)象開始檢索 setMaxResult(int max) 用于設(shè)置最大取出的對(duì)象數(shù)量 通??梢允褂靡陨蟽蓚€(gè)方法實(shí)現(xiàn)一
13、個(gè)通用的分頁分頁 Query對(duì)象提供了簡(jiǎn)便的分頁方法 setFirstResult(int firstResult)方法 設(shè)置第一條記錄的位置 setMaxResults(int maxResults)方法 設(shè)置最大返回的記錄條數(shù)/ 省略部分代碼省略部分代碼query.setFirstResult(pageIndex-1)*pageSize);query.setMaxResults(pageSize);List result=query.list();子查詢 子查詢是SQL 中非常重要的功能 HQL同樣支持此機(jī)制 Hibernate 子查詢必須用圓括號(hào)包圍且必須出現(xiàn)在where 子句中 怎樣查
14、詢價(jià)格大于street_id = 1000的房屋的平均價(jià)格的房屋信息?select * from House as h1 where h1.price ( select avg(h2.price) from House h2 where h2.street_id = 1000)本地SQL SQL 查詢 Hibernate 對(duì)本地SQL查詢提供了內(nèi)置的支持 Session 的createSQLQuery()方法返回SQLQuery 對(duì)象 SQLQuery接口繼承了Query接口 SQLQuery接口的addEntity()方法將查詢結(jié)果集中的關(guān)系數(shù)據(jù)映射為對(duì)象 通過命名查詢實(shí)現(xiàn)本地SQL查詢 使用元素定義本地SQL 查詢語句 與元素并列 以方式保存SQL 語句 通過Session 對(duì)象的ge
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- XXX村黨員個(gè)人整改措施計(jì)劃范文兩篇
- 旅行社導(dǎo)游培訓(xùn)
- 2025年林芝c1貨運(yùn)從業(yè)資格證模擬考試題
- 口腔齲病的講課
- 2025的汽車轉(zhuǎn)讓合同樣本
- 2025產(chǎn)品銷售合同簡(jiǎn)單模板
- 2025鍋爐安裝施工合同范例
- 電信運(yùn)營成本控制
- 通信設(shè)備投保指南
- 高速公路工程誠信宣言
- 液氯槽車卸車安全操作規(guī)程培訓(xùn)
- 排水管道檢測(cè)項(xiàng)目總體實(shí)施方案樣本
- 青少年的社會(huì)認(rèn)知發(fā)展與教育:理論探索
- 部隊(duì)行車安全教育
- 輕紡行業(yè)技能鑒定考試-細(xì)紗保全筆試(2018-2023年)真題摘選含答案
- 大學(xué)試題(醫(yī)學(xué))-中藥資源學(xué)筆試(2018-2023年)真題摘選含答案
- 2024年中建七局建筑裝飾工程有限公司招聘筆試參考題庫含答案解析
- 二年級(jí)【語文(統(tǒng)編版)】《紙船和風(fēng)箏》第二課時(shí)課件
- 2024年小學(xué)體育與健康一年級(jí)教案全冊(cè)
- 電機(jī)制造中的供應(yīng)商管理與合作模式
- 芯片散熱市場(chǎng)分析報(bào)告
評(píng)論
0/150
提交評(píng)論