版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、hibernate criteria對(duì)象詳解1. 序言hibernate框架是目前javaee軟件開(kāi)發(fā)的企業(yè)主流框架, 學(xué)習(xí)hibernate必然要掌握orm(對(duì)象關(guān)系映射object/relation mapping)的概念思想, hibernate擁有完全的orm理念,我們?cè)诓僮鲾?shù)據(jù)庫(kù)時(shí),可以通過(guò)面向?qū)ο蟮姆绞骄涂梢酝瓿蓴?shù)據(jù)庫(kù)的crud(創(chuàng)建(create)、更新(update)、讀?。╮ead)和刪除(delete)操作。企業(yè)在使用hibernate進(jìn)行軟件開(kāi)發(fā)進(jìn)行數(shù)據(jù)查詢時(shí),主要基于 hql(hibernate 面向?qū)ο蟮牟樵冋Z(yǔ)言, 語(yǔ)法類似sql )、 criteria (面向?qū)ο蟮?/p>
2、條件查詢對(duì)象)、 sql (原生態(tài)sql語(yǔ)句) 幾種方式, 本文重點(diǎn)講解criteria 這種完全面向?qū)ο缶幊滩樵兎绞剑?詳細(xì)分析crieria 各種使用與sql生成關(guān)系。2. criteria牛刀小試 criteria 是一個(gè)完全面向?qū)ο螅蓴U(kuò)展的條件查詢api ,通過(guò)它完全不需要考慮數(shù)據(jù)庫(kù)底層如何實(shí)現(xiàn)、sql語(yǔ)句如何編寫(xiě), 是hibernate框架的核心查詢對(duì)象。hibernate 定義了criteriaspecification接口規(guī)范用來(lái)完成面向?qū)ο蟮臈l件查詢,criteria 就是criteriaspecification的子接口。2.1. 創(chuàng)建數(shù)據(jù)庫(kù)環(huán)境 我們以 部門(mén)(depart
3、ment)和員工(employee) 案例,來(lái)講解criteria的詳細(xì)使用 部門(mén)表 department 使用mysql5.x數(shù)據(jù)庫(kù) 數(shù)據(jù)庫(kù) hibernate3 用戶名 root 密碼 abc 部門(mén)表 employee create table department ( id int(11) not null auto_increment, name varchar(255) default null, primary key (id) engine=innodb default charset=utf8;員工表 department create table employee (id i
4、nt(11) not null auto_increment,name varchar(255) default null, age int(11) not null, birthday date default null, department_id int(11) default null, primary key (id), foreign key (department_id) references department (id) engine=innodb default charset=utf8; 2.2. 使用jpa注解配置實(shí)體類部門(mén)類 department員工類 employe
5、e2.3. 使用crteria查詢所有部門(mén)和所有員工2.3.1. 查詢所有部門(mén)產(chǎn)生的sql語(yǔ)句 2.3.2. 查詢所有員工產(chǎn)生的sql語(yǔ)句當(dāng)session.createcriteria(實(shí)體類.class) 就會(huì)產(chǎn)生一條 select 所有列 from 表; sql語(yǔ)句, 查詢實(shí)體類對(duì)應(yīng)數(shù)據(jù)表的所有記錄, 然后我們就可以在這個(gè)criteria對(duì)象上進(jìn)行條件查詢、分頁(yè)查詢、多表關(guān)聯(lián)查詢、投影查詢、子查詢 等一系列操作 . 3. criteria sql定制詳解3.1. 對(duì)查詢添加條件對(duì)象criterionorg.hibernate.criterion.criterion是hibernate提供的
6、一個(gè)面向?qū)ο蟛樵儣l件接口,一個(gè)單獨(dú)的查詢就是criterion接口的一個(gè)實(shí)例, 用于限制criteria對(duì)象的查詢, 在hibernate中criterion對(duì)象的創(chuàng)建通常是通過(guò)restrictions 工廠類完成的。restrictions 提供條件查詢方法 例如: 1、 查詢姓”張”的所有員工信息 產(chǎn)生的sql 語(yǔ)句 2、 查詢年齡大于24的所有員工 產(chǎn)生的sql語(yǔ)句 3、 查詢年齡小于28的 姓“王”的員工產(chǎn)生的sql語(yǔ)句 對(duì)于多個(gè)查詢條件, restrictions 提供了邏輯組合查詢方法and(criterion lhs, criterion rhs) 用于生成多個(gè)條件and關(guān)系sq
7、l語(yǔ)句 or(criterion lhs, criterion rhs) 用于生成多個(gè)條件or關(guān)系sql語(yǔ)句not(criterion expression) 用于查詢與條件相反的數(shù)據(jù),生成not取反查詢語(yǔ)句3.2. 分頁(yè)操作 firstresult和maxresults criteria 接口提供 用于分頁(yè)查詢的方法,實(shí)現(xiàn)數(shù)據(jù)庫(kù)sql物理級(jí)別的分頁(yè)操作 setfirstresult(int firstresult) 設(shè)置記錄的其實(shí)位置 0 代表第一條記錄 setmaxresults(int maxresults) 設(shè)置查詢記錄的長(zhǎng)度 例如: 我要查詢 1-10條件記錄 firstresult
8、為0 , maxresult為10 產(chǎn)生的sql語(yǔ)句3.3. 排序操作 order hibernate 提供org.hibernate.criterion.order 用于排序操作 , criteria 接口提供addorder(order order)用于生成排序sql 例如: 查詢所有員工信息,按照年齡升序排列產(chǎn)生的sql語(yǔ)句 3.4. 多表關(guān)聯(lián)操作 createalias和createcriteria criteria接口提供createalias 和 createcriteria 兩組方法用于完成多表關(guān)聯(lián)查詢 createalias(string associationpath, st
9、ring alias) 采用內(nèi)連接關(guān)聯(lián)createalias(string associationpath, string alias, int jointype) 可以通過(guò)jointype 指定連接類型 createcriteria(string associationpath) 采用內(nèi)連接關(guān)聯(lián) (返回新的criteria對(duì)象)createcriteria(string associationpath, int jointype) 可以通過(guò)jointype指定關(guān)聯(lián)類型 (返回新的criteria對(duì)象 ) 例如: 查詢部門(mén)為“人力資源部”的所有員工 方法一: 使用createcriteria
10、方法 產(chǎn)生的sql語(yǔ)句代碼中的 criteria對(duì)象,是針對(duì)employee表, criteria.createcriteria(”department”) 就是建立employee表和department表的內(nèi)連接。 返回的是 針對(duì)department表新的criteria2對(duì)象, 這時(shí)再對(duì)criteria2 添加條件, 就是查詢department部門(mén)表的屬性,而不是employee的屬性了。 方法二: 使用createalias 方法 使用createalias 方法不會(huì)像 createcriteria 那樣返回一個(gè)新的criteria對(duì)象,alias只是對(duì)關(guān)聯(lián)表進(jìn)行別名設(shè)置,通過(guò)別名引
11、用設(shè)置屬性 產(chǎn)生的sql語(yǔ)句 3.5. 投影、分組查詢 projection 在實(shí)際開(kāi)發(fā)中,進(jìn)行查詢是, 可能只需要返回表中的指定列信息(投影) 或者進(jìn)行統(tǒng)計(jì)查詢 (count、avg、sum、min、max), criteria接口提供setprojection(projection projection) 方法用于實(shí)現(xiàn)投影查詢操作。 org.hibernate.criterion.projections 工廠類用于返回projection投影查詢對(duì)象 例如: 1. 查詢員工表的name和age屬性產(chǎn)生的sql語(yǔ)句pperty(屬性名) 也可以寫(xiě)為 propert
12、y.forname(屬性名 )2查詢員工的總數(shù)量 projections 提供了分組函數(shù)的查詢方法 rowcount() 查詢記錄總數(shù)量count(string propertyname) 統(tǒng)計(jì)某列數(shù)量countdistinct(string propertyname) 統(tǒng)計(jì)某列數(shù)量(排除重復(fù))avg(string propertyname) 統(tǒng)計(jì)某列平均值 sum(string propertyname) 對(duì)某列值求和 max(string propertyname) 求某列最大值 min(string propertyname) 求某列最小值 產(chǎn)生的sql語(yǔ)句 3查詢每個(gè)部門(mén)的員工數(shù)量 (
13、輸出部門(mén)的編號(hào)和數(shù)量 )projections提供groupproperty(string propertyname) 用于執(zhí)行分組操作產(chǎn)生的sql語(yǔ)句3.6. 設(shè)置結(jié)果集封裝策略 resulttransformer 剛剛說(shuō)了投影操作的使用, 其實(shí)在hibernate 內(nèi)部投影查詢是會(huì)影響到結(jié)果集的封裝策略的。 先用hql舉例說(shuō)明 :session.createquery(”from employee”).list(); 返回 list<employee> session.createquery(”select count(e) from employee e”).list();
14、返回list<long>session.createquery(”select name,age from employee”).list(); 返回list<object> 從這幾個(gè)例子我們不難發(fā)現(xiàn),如果沒(méi)有指定select語(yǔ)句(沒(méi)有投影) ,那么將返回表中的所有字段,返回結(jié)果會(huì)被封裝到entity實(shí)體對(duì)象employee中,一但提供select語(yǔ)句(投影)后,返回的結(jié)果類型,將不再封裝到employee對(duì)象,而是根據(jù)投影的實(shí)際類型返回, 這就是投影對(duì)結(jié)果封裝策略的影響。 我們?cè)賮?lái)看之前寫(xiě)過(guò)的criteria 查詢案例 :session.createcriteria(
15、employee.class).list(); 返回 list<employee> session.createcriteria(employee.class).setprojection(pjectionlist().add(property.forname(”name”).add(property.forname(”age”); 返回 list<object> 投影之后, 返回的結(jié)果將不再被封裝到employee對(duì)象中,這是為什么呢? 我們一起來(lái)看看 criteria的接口定義,不難發(fā)現(xiàn)在criteria接口中提供了一個(gè)setresulttransformer(resulttransformer resulttransformer),這個(gè)resulttransformer就是結(jié)果集轉(zhuǎn)換策略接口, 在criteria的父接口中criteriaspecification定義了幾個(gè)resulttransformer的常用實(shí)現(xiàn) alias_to_entity_map 將結(jié)果集封裝到map對(duì)象 root_entity 將結(jié)果集封裝到根實(shí)體對(duì)象distinct_root_entity 將結(jié)果集封裝到不重復(fù)的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年土地整治項(xiàng)目土地抵押合同范例3篇
- 2024年某物業(yè)管理公司與某小區(qū)關(guān)于物業(yè)服務(wù)合同
- 房屋租賃合同模板合集五篇
- 七年級(jí)第一學(xué)期生物教案模板
- 跟崗實(shí)習(xí)工作總結(jié)范文
- 舉行春游活動(dòng)方案
- 配音比賽策劃書(shū)
- 店長(zhǎng)述職報(bào)告15篇
- 學(xué)生競(jìng)選演講稿怎么寫(xiě)才能吸引人?【5篇】
- 投標(biāo)承諾書(shū)集錦15篇
- 社區(qū)居家養(yǎng)老方案
- 2024年英語(yǔ)專業(yè)四級(jí)考試真題及詳細(xì)答案
- 輸液巡視不及時(shí)品管圈課件
- 中班自主游戲總結(jié)匯報(bào)
- 加油站防偷盜與防災(zāi)安全培訓(xùn)
- 玻璃制造企業(yè)的管理與技術(shù)創(chuàng)新
- 《護(hù)理病人隱私保護(hù)措施》
- MHT:中小學(xué)生心理健康檢測(cè)(含量表與評(píng)分說(shuō)明)
- 企業(yè)戰(zhàn)略管理顧問(wèn)聘用合同
- 貴州壯麗山水文化之旅
- 遼寧省朝陽(yáng)市朝陽(yáng)縣2023-2024學(xué)年九年級(jí)上學(xué)期期末數(shù)學(xué)試題
評(píng)論
0/150
提交評(píng)論