版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
條件查詢講師:李剛本次要點條件查詢關(guān)聯(lián)和動態(tài)關(guān)聯(lián)投影運算離線查詢子查詢條件查詢Hibernate5直接借助了JPA的條件查詢,這是更具面向?qū)ο筇厣臄?shù)據(jù)查詢方式,通過如下幾個類完成。CriteriaBuilder:這是一個工廠類,這個工廠類用于創(chuàng)建CriteriaQuery、CriteriaUpdate、CriteriaDelete、Predicate、Expresssion。CriteriaQuery、CriteriaUpdate、CriteriaDelete:第一個API代表一個查詢,后面?zhèn)€API代表一個DML操作。Expression:代表一個表達(dá)式。Predicate:代表查詢條件。使用CriteriaBuilder的運算符方法組合兩個Expression來生成一個Predicate。Root:代表要查詢的根實體。Join:代表一個關(guān)聯(lián)。條件查詢步驟執(zhí)行條件查詢的步驟如下:(1)獲得JPA的EntityManager對象、并打開事務(wù)。(2)以EntityManager對象創(chuàng)建CriteriaBuilder對象。(3)調(diào)用CriteriaBuilder對象的createQuery()方法創(chuàng)建CriterionQuery查詢。(4)調(diào)用CriterionQuery對象的from()方法設(shè)置查詢的根實體,該方法返回一個Root對象。如果要查詢多個Root對象,這一步要執(zhí)行多次。(5)調(diào)用CriterionQuery對象的select()方法設(shè)置查詢語句的select部分。(6)調(diào)用CriterionQuery對象的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è)置要查詢的根實體類
Root<Student>root=criteria.from(Student.class);//下面語句不是必須的,條件查詢默認(rèn)會查詢唯一的Root實體
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代表一次查詢,它的主要作用就是組織查詢語句的各子句。因此它提供的方法大致對應(yīng)了select語句中的各個子句。select(Selection<?extendsT>selection):如果只要select單個實體或單個屬性,可使用該方法。multiselect(Selection<?>...selections):如果只要select多個實體或多個屬性、以及它們的組合,使用該方法。distinct(booleandistinct):用于去除重復(fù)行。對應(yīng)于select后的distinct關(guān)鍵字。from(Class<X>entityClass):用于設(shè)置查詢的根實體。對應(yīng)于查詢語句的from子句。where(Predicate...restrictions):設(shè)置查詢條件。對應(yīng)于為查詢語句設(shè)置where子句。groupBy(Expression<?>...grouping):設(shè)置分組。對應(yīng)于為查詢語句設(shè)置groupby子句。having(Predicate...restrictions):過濾分組。對應(yīng)于為查詢語句設(shè)置having子句。orderBy(Order...o):設(shè)置排序。對應(yīng)于為查詢語句設(shè)置orderby子句。Criteria說明Criteria包含如下常用方法:CriteriasetFirstResult(intfirstResult):設(shè)置查詢返回的第一行記錄。CriteriasetMaxResults(intmaxResults):設(shè)置查詢返回的記錄數(shù)。Criteriaadd(Criterioncirterion):添加過濾條件。CriteriaaddOrder(Orderorder):添加排序規(guī)則。Listlist():返回查詢結(jié)果。Predicate說明Predicate接口代表一個查詢條件,該查詢條件由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è)置修改或刪除的實體。對應(yīng)于from子句。where(Expression<Boolean>restriction):為修改或刪除設(shè)置條件。對應(yīng)于where子句。set(Path<Y>attribute,Xvalue):CriteriaUpdate的方法、CriteriaDelete沒這個方法。用于為更新語句設(shè)置新的值,對應(yīng)于set子句(delete沒有set子句,因此CriteriaDelete沒這個方法)。select的用法如果需要在查詢多個屬性或多個實體、或查詢多個屬性和多個實體的組合,可使用CriteriaQuery的multiselect()方法,也可先用CriteriaBuilder的array()方法包裝多個表達(dá)式,然后調(diào)用CriteriaQuery的select()方法。條件查詢還允許將查詢出來的多個屬性封裝DTO對象,這樣查詢得到的結(jié)果集的元素就是DTO對象,而不再是數(shù)組。元組查詢元組查詢是multiselect的改進。JPA提供了一個Tuple接口,專門用于封裝多個屬性,這樣就無需額外的DTO類。多Root查詢Root代表了條件查詢要查詢的目標(biāo)實體,它是獲取屬性、屬性路徑、關(guān)聯(lián)的基礎(chǔ),通常來說每個條件查詢只需定義一個Root,但條件查詢也支持多Root查詢。如果要使用多Root查詢,則需要多次調(diào)用CriteriaQuery的from()方法,并使用multiselect選出多個Root實體(也可使用select()方法)。關(guān)聯(lián)Root對象是獲取關(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對象代表了其中的from子句,from子句后面就是緊跟xxxjoin,因此JPA使用From對象來支持關(guān)聯(lián)(對應(yīng)于join子句)Fetch關(guān)聯(lián)為了支持Fetch關(guān)聯(lián)查詢,JPA為Root對象提供了fetch()方法,該方法將會返回一個Fetch對象。實際上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()方法進行分組;如果要執(zhí)行聚集運行,則需要使用CriteriaBuilder提供的min()、max()、avg()、count()、sum()、least()、greatest()方法,它們對應(yīng)于SQL支持聚集函數(shù),而greatest
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度電商倉儲倉儲信息化建設(shè)合作協(xié)議3篇
- 二零二五版年薪制勞動合同法修訂版與員工績效評估標(biāo)準(zhǔn)4篇
- 2025年度個人向P2P平臺借款合作協(xié)議3篇
- 2025年度特色民宿門頭裝修與文化展示合同4篇
- 二零二五年度新能源儲能技術(shù)研發(fā)合作合同范本4篇
- 二零二五年產(chǎn)權(quán)商鋪租賃管理及增值服務(wù)合同3篇
- 二零二五版農(nóng)業(yè)資源整合土地承包經(jīng)營權(quán)租賃合同4篇
- 二零二五年度動物園場地租賃及動物保護合作協(xié)議3篇
- 二零二五年度牛奶飲品消費者行為研究與應(yīng)用合同4篇
- 二零二五年度爬架租賃與施工現(xiàn)場應(yīng)急救援合同4篇
- AQ-T 1009-2021礦山救護隊標(biāo)準(zhǔn)化考核規(guī)范
- 鹽酸??颂婺崤R床療效、不良反應(yīng)與藥代動力學(xué)的相關(guān)性分析的開題報告
- 消防設(shè)施安全檢查表
- 組合結(jié)構(gòu)設(shè)計原理 第2版 課件 第6、7章 鋼-混凝土組合梁、鋼-混凝土組合剪力墻
- 建筑公司資質(zhì)常識培訓(xùn)課件
- 旅居管家策劃方案
- GB/T 26316-2023市場、民意和社會調(diào)查(包括洞察與數(shù)據(jù)分析)術(shù)語和服務(wù)要求
- 春節(jié)值班安全教育培訓(xùn)
- 帶狀皰疹護理查房
- 平衡計分卡-化戰(zhàn)略為行動
- 幼兒園小班下學(xué)期期末家長會PPT模板
評論
0/150
提交評論