




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Hibernate,倉 J建Configuration 類的實例首先定位映射文檔位置、讀取配置,然后倉建SessionFactory對象語言和操作數(shù)據(jù)庫不匹配:模型不匹配(阻抗不匹配) .可以使用JDBC手動轉(zhuǎn)換;sql參數(shù)和jdbc中用對象賦值 .使用 ORM(Object Relation Mapping對象關(guān)系映射)框架:hibernate二. Hibernate 安裝配置 .配置文件 Hibernate.cfg.xml 禾口 Hperties.映射文件xxx.hbm.xml:對象模型和關(guān)系模型的映射 三.開發(fā)流程1. 由 Domain Object ->
2、mapping -> db2. 有 DB 開始,用工具生成 mapping 和 Domain Object3. 由配置文件開始四. Domain Object 限制1.默認(rèn)的構(gòu)造方法(必須的) 2.有無意義的標(biāo)示符id(主鍵)可選 3.非 final 的,對懶加載有影響 可選Configuration SessionFactory Session Transaction QueryCriteriaConfiguration 類 Configuration 類負(fù)責(zé)配置并啟動SessionFactory對象。在Hibernate的啟動的過程中,對象。SessionFactory接 口Sess
3、io nFactory 接口負(fù)責(zé)初始化 Hibernate。它充當(dāng)數(shù)據(jù)存儲源的代理,并負(fù)責(zé)創(chuàng)建Session對象。這里用到了工廠模式。需要注意的是SessionFactory并不是輕量級的,因為一般情況下,一個項目通常只需要一個Sessio nFactory就夠,當(dāng)需要操作多個數(shù)據(jù)庫時,可以為每個數(shù)據(jù)庫指定一個SessionFactory。Session接口 Session接口負(fù)責(zé)執(zhí)行被持久化對象的CRUD操作 (CRUD 的任務(wù)是完成與數(shù)據(jù)庫的交流,包含了很多常見的 SQL 語 句。)。但需要注意的是Session對象是非線程安全的。同時,Hibernate 的session不同于JSP應(yīng)用
4、中的HttpSession。這里當(dāng)使用session這個 術(shù)語時,其實指的是 Hibernate中的session,而以后會將HttpSession對象稱為用戶 session。Transaction 接口Transaction接口負(fù)責(zé)事務(wù)相關(guān)的操作。它是可選的,開發(fā)人員也可以設(shè)計編寫自己的底層事務(wù)處理代碼Query 和 Criteria 接口Query和Criteria接口負(fù)責(zé)執(zhí)行各種數(shù)據(jù)庫查詢。它可以使用HQL語句或 SQL 語句兩種表達(dá)方式。1get和load方法的區(qū)別 load/get方法均可以根據(jù)指定的實體類和id從數(shù)據(jù)庫中讀取記錄,并返回與之對應(yīng)的實體對象 。load返回的是代理對
5、象,不會返回空值;get方法返回實體類;load方法可以充分利用內(nèi)部緩存和二級緩存中現(xiàn)有的數(shù)據(jù),而get方法僅僅在內(nèi)部緩存中進(jìn)行數(shù)據(jù)查找, 如沒有發(fā)現(xiàn)對應(yīng)的數(shù)據(jù)將越過二級緩存,直接調(diào)用sql完成數(shù)據(jù)讀取。2save方法和persist的區(qū)別save方法在保存的時候如果不開啟事務(wù),數(shù)據(jù)會插入數(shù)據(jù)庫,然后事 務(wù)回滾;persist方法在保存時如果不開啟事務(wù),不會插入數(shù)據(jù)庫數(shù)據(jù);3對象狀態(tài):通過與session和數(shù)據(jù)庫的關(guān)系判斷狀態(tài).瞬時(transient): new出來的對象,跟session和數(shù)據(jù)庫沒有關(guān)系,垃圾回收器會自動回收。持久(Persistent): session內(nèi)部對象,與數(shù)據(jù)庫
6、對應(yīng),數(shù)據(jù)庫中的數(shù)據(jù)發(fā)生變化session會知道。.脫管(detached):不在session內(nèi)部,與數(shù)據(jù)庫中有對應(yīng),數(shù)據(jù)發(fā)生變化session不會知道。脫管狀態(tài)下的數(shù)據(jù)想更新數(shù)據(jù)必須調(diào)用up date語句更新數(shù)據(jù)庫。處于持久態(tài)的對象也稱為 P0(Persistenee Object)瞬時對象和脫管對象也稱為 VO( Value Object)。saveOrU pdate是根據(jù) un save-value的設(shè)定,判定是要 save還是 up date操作1)當(dāng)不知道對象處于什么狀態(tài)時,到底是保存還是更新,可以使用方法 saveOrUpdate;2)原理: hiber nate根據(jù)id判斷,如
7、果數(shù)據(jù)庫有值調(diào)用up date沒有數(shù)據(jù)調(diào)用save;2)saveOrUpdate與merge的區(qū)別:調(diào)用saveOrUpdate對象變成持久對象;調(diào)用merge對象還是脫管的Users.hbm.xmI中的id可以判斷什么時候是瞬時狀態(tài):主鍵判斷:unsaved-value="-1'可以設(shè)置主鍵是-1時候的對象是瞬時的;保存時:判斷unsaved-value的值與保存的id的值,如果兩個值相等 就表示沒保存過,調(diào)用保存數(shù)據(jù);(一般不更改此屬性int:0代表是瞬時對象String: null代表是瞬時對象 evict()清理一集緩存1).查詢?nèi)孔侄蔚那闆r下,如"fro
8、m實體類",list中封裝的對象為實體類本身,各屬性都將得到填充。2).只查詢一個字段,默認(rèn)情況下,list中封裝的是Object對象。3).查詢兩個或兩個以上的字段,默認(rèn)情況下,list中封裝的是Object,長度與所查詢的字段數(shù)一致。對于后兩種情況,用標(biāo)簽遍歷時不太方便,因為無法直接轉(zhuǎn)換成實體 類的對象。比較簡單的解決方法是:在hql中使用select new包名.類名(屬性1,屬性2)from 實體類, 同時在實體類中添加帶參的構(gòu)造方法, 參數(shù)的個數(shù)和順序與(屬性1, 屬性2)保持一致,這樣我們得到的list中存放的依然是實體類 的對象,所查詢到的屬性得到了填充,使用起來更為方
9、便。4、一級緩存的管理當(dāng)應(yīng)用程序調(diào)用 Session的 save() update()、saveOrUpdate() get()或load(),以及調(diào)用查詢接口的list()、iterate()或 filter()方法時,如果在Session緩存中還不存在相應(yīng)的對象,Hibernate就會把該對象加入到第一級緩存中。當(dāng)清理緩存時,Hibernate會根據(jù)緩存中對象的狀態(tài)變化來同步更新數(shù)據(jù)庫。Sessi on為應(yīng)用程序提供了兩個管理緩存的方法:evict(Object obj):從緩存中清除參數(shù)指定的持久化對象。clear():清空緩存中所有持久化對象。二級緩存的管理3.1. Hibernate
10、的二級緩存策略的一般過程如下:1)條件查詢的時候,總是發(fā)出一條 select * from table_name where.(選擇所有字段)這樣的SQL語句查詢數(shù)據(jù)庫,一次獲得 所有的數(shù)據(jù)對象。2) 把獲得的所有數(shù)據(jù)對象根據(jù) ID 放入到第二級緩存中。3)當(dāng)Hibernate根據(jù)ID訪問數(shù)據(jù)對象的時候,首先從Session級緩存中查;查不到,如果配置了二級緩存,那么從二級緩存中查; 查不到,再查詢數(shù)據(jù)庫,把結(jié)果按照 ID 放入到緩存。4) 刪除、更新、增加數(shù)據(jù)的時候,同時更新緩存。Hibernate的二級緩存策略,是針對于ID查詢的緩存策略,對于條件查詢則毫無作用。為此,Hibernate提
11、供了針對條件查詢的 QueryCache。HQL (Hibernate Query Language):查詢的是對象而不是表,支持多態(tài),對象名是區(qū)分大小寫, java 類和屬性。Query接口處理查詢語句;兩種方法:query.listO :查詢?nèi)拷Y(jié)果集query.uniqueResult()查詢唯一結(jié)果集賦值語句有兩種: 通過 ?號傳遞參數(shù),條件:賦值必須與 ?的位置一致 "from Users as users where =?" query.setString(0, name);.通過:Param賦值,好處是如果hql語句中有多個名字作為參數(shù)是需
12、要賦值一次就可以了"from Users as users where =:name "query.setString("name" , name);Oracle 中的關(guān)鍵字不能作為表名字: 兩種方法:table二” userS'或者用反引號將關(guān)鍵字改為字符串 table二”'user'”字段名處理方式與表名相同。/hql 的分頁查詢,好處是此種方式跨數(shù)據(jù)庫,可以移植的,hibernate會根據(jù)配置方言調(diào)用那種數(shù)據(jù)庫/ 第一條的分頁語句,如: oracle 用rownu m.query.setFirstResu
13、lt(0);記錄從 0開始query.setMaxResults(10);/ 取 10 條條件查詢: Criteria接口調(diào)用 ,對象查詢語句,可以添加約束條件Restrictions:限制、約束類,提供一系列的靜態(tài)方法關(guān)聯(lián)關(guān)系:1、表關(guān)聯(lián)關(guān)系 2、對象關(guān)聯(lián)關(guān)系Hibernate的多對一映射時,many-to-one時指定的column默認(rèn)是映射到關(guān)聯(lián)表的主鍵上(缺?。w現(xiàn)了無意義的id,實現(xiàn)主外鍵關(guān)聯(lián);此標(biāo)簽的column可以不指定,默認(rèn)為和name相同的字段。prop erty-ref:可以指定映射的外鍵是哪個列我們只需要理解對象關(guān)系模型,hibernate會自動處理表之間的關(guān)聯(lián)關(guān) 系。
14、Hibernate的主鍵生成策略 in creme nt:由hibernate自動以遞增的方式生成主鍵;identity :由底層數(shù)據(jù)庫生成標(biāo)識;sequenee Hibernate根據(jù)底層數(shù)據(jù)庫的序列生成標(biāo)示符,要求底層數(shù)據(jù)庫支持序列;hilo : Hibernate根據(jù)high/low算法生成標(biāo)示符;seqhio:使用一個高/低位算法高效的生成long、short或者int類型的標(biāo)示符;native:根據(jù)底層數(shù)據(jù)庫自動生成標(biāo)識符的方式,自動選擇in creme nt、 identity 或者 hilo;uuid.hex: Hibernate采用128位的UUID算法生成標(biāo)示符;uuid.string: UUID被編碼成一個16字符長的字符串;assigned自然主鍵,由Java應(yīng)用程序負(fù)責(zé)生成標(biāo)示符;foreign :使用另外一個相關(guān)聯(lián)的對象的標(biāo)示符;注:映射Set集合屬性時,如果element元素包括not-null= ”true”屬性,則集合屬性表
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 過期食品銷毀協(xié)議書
- 保安和女工合同協(xié)議書
- 買賣合同轉(zhuǎn)欠款協(xié)議書
- 2人合作配件協(xié)議書
- 駕駛服務(wù)采購協(xié)議書
- 項目防疫責(zé)任協(xié)議書
- 酒店簽訂優(yōu)惠協(xié)議書
- 雇傭車輛合同協(xié)議書
- 贈送房屋出售協(xié)議書
- 討賬傭金提成協(xié)議書
- 2025-2030年芳綸纖維行業(yè)市場深度調(diào)研及發(fā)展趨勢與投資研究報告
- 紡織機(jī)械操作知識掌握策略試題及答案
- 煙臺科目一試題及答案
- 2025年廣東佛山市三水海江建設(shè)投資有限公司招聘筆試參考題庫含答案解析
- 初中英語人教新目標(biāo) (Go for it) 版七年級下冊Unit 7 Its raining!Section A教學(xué)設(shè)計
- 民法典物權(quán)編詳細(xì)解讀課件
- 列車緊制不緩解故障處理湖南鐵道賀婷課件
- 2025年地理會考簡答題思路模板
- 2025年矯形器裝配工競賽考試題(附答案)
- 2025年行政執(zhí)法證資格考試必刷經(jīng)典題庫及答案(共150題)
- 2025代謝相關(guān)脂肪性肝病基層診療與管理指南解讀課件
評論
0/150
提交評論