![第5 6章hibernate課件08條件查詢_第1頁](http://file4.renrendoc.com/view/49402f9caae09ce2f6da18438f70499a/49402f9caae09ce2f6da18438f70499a1.gif)
![第5 6章hibernate課件08條件查詢_第2頁](http://file4.renrendoc.com/view/49402f9caae09ce2f6da18438f70499a/49402f9caae09ce2f6da18438f70499a2.gif)
![第5 6章hibernate課件08條件查詢_第3頁](http://file4.renrendoc.com/view/49402f9caae09ce2f6da18438f70499a/49402f9caae09ce2f6da18438f70499a3.gif)
![第5 6章hibernate課件08條件查詢_第4頁](http://file4.renrendoc.com/view/49402f9caae09ce2f6da18438f70499a/49402f9caae09ce2f6da18438f70499a4.gif)
![第5 6章hibernate課件08條件查詢_第5頁](http://file4.renrendoc.com/view/49402f9caae09ce2f6da18438f70499a/49402f9caae09ce2f6da18438f70499a5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
條件查詢講師:李剛本次要點(diǎn)條件查詢關(guān)聯(lián)和動(dòng)態(tài)關(guān)聯(lián)投影運(yùn)算離線查詢子查詢條件查詢Hibernate5直接借助了JPA的條件查詢,這是更具面向?qū)ο筇厣臄?shù)據(jù)查詢方式,通過如下幾個(gè)類完成。CriteriaBuilder:這是一個(gè)工廠類,這個(gè)工廠類用于創(chuàng)建CriteriaQuery、CriteriaUpdate、CriteriaDelete、Predicate、Expresssion。CriteriaQuery、CriteriaUpdate、CriteriaDelete:第一個(gè)API代表一個(gè)查詢,后面?zhèn)€API代表一個(gè)DML操作。Expression:代表一個(gè)表達(dá)式。Predicate:代表查詢條件。使用CriteriaBuilder的運(yùn)算符方法組合兩個(gè)Expression來生成一個(gè)Predicate。Root:代表要查詢的根實(shí)體。Join:代表一個(gè)關(guān)聯(lián)。條件查詢步驟執(zhí)行條件查詢的步驟如下:(1)獲得JPA的EntityManager對(duì)象、并打開事務(wù)。(2)以EntityManager對(duì)象創(chuàng)建CriteriaBuilder對(duì)象。(3)調(diào)用CriteriaBuilder對(duì)象的createQuery()方法創(chuàng)建CriterionQuery查詢。(4)調(diào)用CriterionQuery對(duì)象的from()方法設(shè)置查詢的根實(shí)體,該方法返回一個(gè)Root對(duì)象。如果要查詢多個(gè)Root對(duì)象,這一步要執(zhí)行多次。(5)調(diào)用CriterionQuery對(duì)象的select()方法設(shè)置查詢語句的select部分。(6)調(diào)用CriterionQuery對(duì)象的where()方法設(shè)置查詢條件(相當(dāng)于設(shè)置where子句)。(7)以CriterionQuery為參數(shù),調(diào)用EntityManager的createQuery()方法創(chuàng)建Query,剩下部分與前面JPQL查詢的步驟相同。條件查詢的示例privatevoidquery(){//打開EntityManager和事務(wù)
EntityManagerem=emf.createEntityManager();em.getTransaction().begin();//創(chuàng)建CriteriaBuilderCriteriaBuilderbuilder=em.getCriteriaBuilder();//創(chuàng)建CriteriaQuery,傳入的類型參數(shù)代表該條件查詢返回結(jié)果集里的元素類型
CriteriaQuery<Student>criteria=builder.createQuery(Student.class);//設(shè)置要查詢的根實(shí)體類
Root<Student>root=criteria.from(Student.class);//下面語句不是必須的,條件查詢默認(rèn)會(huì)查詢唯一的Root實(shí)體
criteria.select(root);//使用builder生成查詢條件
Predicatepred=builder.greaterThan(root.get(Student_.name),"a");//①//使用CriteriaQuery的where()方法添加查詢條件
criteria.where(pred);List<Student>list=em.createQuery(criteria).getResultList();}條件查詢CriteriaQuery代表一次查詢,它的主要作用就是組織查詢語句的各子句。因此它提供的方法大致對(duì)應(yīng)了select語句中的各個(gè)子句。select(Selection<?extendsT>selection):如果只要select單個(gè)實(shí)體或單個(gè)屬性,可使用該方法。multiselect(Selection<?>...selections):如果只要select多個(gè)實(shí)體或多個(gè)屬性、以及它們的組合,使用該方法。distinct(booleandistinct):用于去除重復(fù)行。對(duì)應(yīng)于select后的distinct關(guān)鍵字。from(Class<X>entityClass):用于設(shè)置查詢的根實(shí)體。對(duì)應(yīng)于查詢語句的from子句。where(Predicate...restrictions):設(shè)置查詢條件。對(duì)應(yīng)于為查詢語句設(shè)置where子句。groupBy(Expression<?>...grouping):設(shè)置分組。對(duì)應(yīng)于為查詢語句設(shè)置groupby子句。having(Predicate...restrictions):過濾分組。對(duì)應(yīng)于為查詢語句設(shè)置having子句。orderBy(Order...o):設(shè)置排序。對(duì)應(yīng)于為查詢語句設(shè)置orderby子句。Criteria說明Criteria包含如下常用方法:CriteriasetFirstResult(intfirstResult):設(shè)置查詢返回的第一行記錄。CriteriasetMaxResults(intmaxResults):設(shè)置查詢返回的記錄數(shù)。Criteriaadd(Criterioncirterion):添加過濾條件。CriteriaaddOrder(Orderorder):添加排序規(guī)則。Listlist():返回查詢結(jié)果。Predicate說明Predicate接口代表一個(gè)查詢條件,該查詢條件由CriteriaBuilder負(fù)責(zé)產(chǎn)生。它用于產(chǎn)生查詢條件。因此它包含了equal、notEqual、gt、greaterThan、ge、greaterThanOrEqualTo、lt、lessThan、le、lessThanOrEqualTo、between、like等生成查詢條件的方法CriteriaUpdate,CriteriaDeleteCriteriaUpdate、CriteriaDelete來執(zhí)行DML語句,由于update、delete語句所包含的子句更少,因此CriteriaUpdate與CriteriaDelete的方法較少:from(Class<T>entityClass):設(shè)置修改或刪除的實(shí)體。對(duì)應(yīng)于from子句。where(Expression<Boolean>restriction):為修改或刪除設(shè)置條件。對(duì)應(yīng)于where子句。set(Path<Y>attribute,Xvalue):CriteriaUpdate的方法、CriteriaDelete沒這個(gè)方法。用于為更新語句設(shè)置新的值,對(duì)應(yīng)于set子句(delete沒有set子句,因此CriteriaDelete沒這個(gè)方法)。select的用法如果需要在查詢多個(gè)屬性或多個(gè)實(shí)體、或查詢多個(gè)屬性和多個(gè)實(shí)體的組合,可使用CriteriaQuery的multiselect()方法,也可先用CriteriaBuilder的array()方法包裝多個(gè)表達(dá)式,然后調(diào)用CriteriaQuery的select()方法。條件查詢還允許將查詢出來的多個(gè)屬性封裝DTO對(duì)象,這樣查詢得到的結(jié)果集的元素就是DTO對(duì)象,而不再是數(shù)組。元組查詢?cè)M查詢是multiselect的改進(jìn)。JPA提供了一個(gè)Tuple接口,專門用于封裝多個(gè)屬性,這樣就無需額外的DTO類。多Root查詢Root代表了條件查詢要查詢的目標(biāo)實(shí)體,它是獲取屬性、屬性路徑、關(guān)聯(lián)的基礎(chǔ),通常來說每個(gè)條件查詢只需定義一個(gè)Root,但條件查詢也支持多Root查詢。如果要使用多Root查詢,則需要多次調(diào)用CriteriaQuery的from()方法,并使用multiselect選出多個(gè)Root實(shí)體(也可使用select()方法)。關(guān)聯(lián)Root對(duì)象是獲取關(guān)聯(lián)的基礎(chǔ),JPA提供了Join接口來代表關(guān)聯(lián),Root和Join都是From的子接口,F(xiàn)rom為建立關(guān)聯(lián)提供了各種Join方法。select語句:select*fromtableAxxxjointableB...,JPA的From對(duì)象代表了其中的from子句,from子句后面就是緊跟xxxjoin,因此JPA使用From對(duì)象來支持關(guān)聯(lián)(對(duì)應(yīng)于join子句)Fetch關(guān)聯(lián)為了支持Fetch關(guān)聯(lián)查詢,JPA為Root對(duì)象提供了fetch()方法,該方法將會(huì)返回一個(gè)Fetch對(duì)象。實(shí)際上fetch()方法來自Root和Fetch共同的父接口:FetchParent,因此Root和Fetch都可調(diào)用fetch()方法。FetchParent定義了如下幾類fetch()方法。fetch(XxxAttribute<?superX,?,Y>attribute,JoinTypejt):設(shè)置使用Fetch關(guān)聯(lián),該方法需要使用JPA的元模型。其中JoinType參數(shù)用于指定連接類型,該參數(shù)可以省略,如果省略該參數(shù),默認(rèn)使用內(nèi)連接。fetch(XxxAttribute<StringattributeName,JoinTypejt):設(shè)置使用Fetch關(guān)聯(lián),該方法直接需要String類型的屬性名。其中JoinType參數(shù)用于指定連接類型,該參數(shù)可以省略,如果省略該參數(shù),默認(rèn)使用內(nèi)連接。分組查詢CriteriaQuery提供了groupBy()方法進(jìn)行分組;如果要執(zhí)行聚集運(yùn)行,則需要使用CriteriaBuilder提供的min()、max()、avg()、count()、sum()、least()、greatest()方法,它們對(duì)應(yīng)于SQL支持聚集函數(shù),而greatest
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 防火疏散的應(yīng)急預(yù)案
- 二手房買賣合同終止協(xié)議模板
- 業(yè)務(wù)合同模板:勞動(dòng)聘用關(guān)鍵條款
- 臨時(shí)借用合同范文
- 臨時(shí)工雇傭合同書
- 三方合作合同模板范本
- 云計(jì)算服務(wù)框架合同
- 事業(yè)單位合同到期人員何去何從
- 二手汽車轉(zhuǎn)讓合同協(xié)議
- 個(gè)人土地承包經(jīng)營權(quán)轉(zhuǎn)讓合同范本
- (一診)畢節(jié)市2025屆高三第一次診斷性考試 生物試卷(含答案)
- 《教育強(qiáng)國建設(shè)規(guī)劃綱要(2024-2035年)》解讀與培訓(xùn)
- 2025年市場(chǎng)營銷人員工作計(jì)劃
- 2025年枝江金潤源建設(shè)集團(tuán)招聘筆試參考題庫含答案解析
- 中國減肥連鎖行業(yè)市場(chǎng)調(diào)查研究及投資戰(zhàn)略研究報(bào)告
- 三年級(jí)上冊(cè)豎式計(jì)算練習(xí)300題及答案
- 《社會(huì)主義市場(chǎng)經(jīng)濟(jì)理論(第三版)》第七章社會(huì)主義市場(chǎng)經(jīng)濟(jì)規(guī)則論
- 《腰椎間盤突出》課件
- simotion輪切解決方案與應(yīng)用手冊(cè)
- 柴油發(fā)電機(jī)運(yùn)行檢查記錄表格
- DSC曲線反映PET得結(jié)晶度
評(píng)論
0/150
提交評(píng)論