筆記hibernate框架dayhibernate中進(jìn)行復(fù)雜查詢高級cont_第1頁
筆記hibernate框架dayhibernate中進(jìn)行復(fù)雜查詢高級cont_第2頁
筆記hibernate框架dayhibernate中進(jìn)行復(fù)雜查詢高級cont_第3頁
筆記hibernate框架dayhibernate中進(jìn)行復(fù)雜查詢高級cont_第4頁
筆記hibernate框架dayhibernate中進(jìn)行復(fù)雜查詢高級cont_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、hibernate 框架第六天hibernate 中進(jìn)行復(fù)雜查詢(高級 cont.)8、多表聯(lián)合查詢 (t_dept,t_employee)1、隱式多表連接特點(diǎn):看似是一的操作,但是通過關(guān)系屬性完成 2的連接查詢 dev 部門的員工from Employee as e where e.dept.dname = dev;查詢 xiaohei 員工所在的部門 (適用于 hibernate3.2 以下版本)from Dept as d where = xiaohei;2、顯式多表連接特點(diǎn):類似 sql 語句中多表連接,顯著的特點(diǎn)是用 join 關(guān)鍵字隱式多表連接存在

2、:1 特殊操作不支持2 多次發(fā)送 sql 到數(shù)據(jù)庫中 影響系統(tǒng)的效率1、內(nèi)連接(inner join)sql:select d.*,e.*from t_dept dinner jo_employee eon d.id = e.d_id;hql:from Dept as dinner join d.employees 每一行封裝成 Object代碼實(shí)現(xiàn)class TesttestVoid test()Sesses= hibernateUtil.getCurrentSes();Tranion tx = ses.begranion();Queryquery = ses.createQuery(“fr

3、omDept as d inner joind.Employees ”);/hibernate 對每一行都封裝成一對象,然后又將多個對象封裝成一個Object 數(shù)組List(Object) rets = query.list();For(Object ret :rets)Dept dept = (Dept)ret0;Employee employee = (Employee)1;Sysout( dept.getDname()+employee.getEname();)mit();迫切連接(fetch)hql:from Dept as dinner join fetch d.employees

4、每一行查詢結(jié)果封裝 dept 對象代碼實(shí)現(xiàn)class TesttestVoid test()Sesses= hibernateUtil.getCurrentSes();Tranion tx = ses.begranion();Queryquery = ses.createQuery(“fromDeptas d inner joinfetchd.Employees ”);/hibernate 對每一行都封裝成一主表類型對象List list = Query.list();For(Detp dept:list)Sysout(dept.getName();For(Employee employee:

5、dept.getEmployee)Sysout(employee.getNmae();mit();重復(fù)數(shù)據(jù):1、每一行查詢的對象 都要在 List 集合中。2、集合中的是對象嗎?的是對象的地址存地址占用空間小解決重復(fù)數(shù)據(jù):LinkedHashSet (過濾重復(fù)數(shù)據(jù),有序)2、左外連接 (left outer join)sql:select d.*,e.*from t_dept dleft outer jo_employee eon d.id = e.d_id;hql:from Dept as dleft outer join d.employees 每一行封裝 Objectfrom Dept

6、as dlefter outer join fetch d.employees 每一行封裝 Dept 對象重復(fù)數(shù)據(jù)LinkedHashset 過濾3、右外連接(right outer join)sql :select d.*,e.*from t_dept dright outer jo_employee eon d.id=e.d_idhql:from Dept as dright outer join d.employees; 每一行封裝成 Object注意:右外連接不能使用 fetch問題:通過關(guān)系屬性已經(jīng)可以完成通過 Dept 獲得Employee 為什么還需要進(jìn)行fetch 的組裝?因?yàn)?/p>

7、通過 fetch 進(jìn)行的多表操作,發(fā)送一條sql 語句 效率 高注意:如果明確的需要使用關(guān)系屬性數(shù)據(jù)時,建議應(yīng)用顯示多表連接如果只需要使用關(guān)系的一方數(shù)據(jù),則建議使用隱式多表連接延遲加載異常1、擴(kuò)大事務(wù)邊界2、改變延遲加載的默認(rèn)側(cè)率 lazy=false3、迫切連接繼承關(guān)系實(shí)體關(guān)系1、關(guān)聯(lián)關(guān)系(有 從屬)2、繼承關(guān)系(父子)1、多個實(shí)體間出現(xiàn)大量的共有屬性2、多個實(shí)體從屬于一個范疇 is ahibernate 中實(shí)體的繼承關(guān)系開發(fā)1、O 創(chuàng)建實(shí)體對象 并通過 extends 關(guān)鍵字表達(dá)實(shí)體間的繼承關(guān)系2、R 建表 關(guān)系型數(shù)據(jù)庫 關(guān)系:關(guān)聯(lián)關(guān)系(外鍵)如果需要關(guān)系型數(shù)據(jù)庫繼承關(guān)系 模擬建表(體現(xiàn)繼

8、承關(guān)系 1 父共性 子個性 2 多態(tài)性)1、一張大表把一個繼承體系中的所有的屬性,都作為一張大表的列創(chuàng)建,提供區(qū)分列,通過區(qū)分列中的值 區(qū)分不同的子類2、每一個類一特點(diǎn):通過 2 個表的連接(外鍵) 獲得子類3、M一個繼承體系 對應(yīng)一個 class,寫父類4、5、API ()多態(tài)查詢:查詢父類可以把所有的子類查詢出來hibernate 的鎖機(jī)制鎖:解決多用戶并發(fā)數(shù)據(jù)造成明確:1、并發(fā) (同時 不是分秒不差 0.001 秒)2、相同的數(shù)據(jù)1、樂觀鎖概念:對多用戶并發(fā)數(shù)據(jù)持樂觀態(tài)度。認(rèn)為不會存在多用戶并發(fā),但是如果出現(xiàn)了多用戶并發(fā)時,也會解決。原理:1、需要程序員在建表時,為表建立一個版本列,hi

9、bernate 會在一行數(shù)據(jù)時為版本列指定初始值為 0,每一次更新對應(yīng)數(shù)據(jù),版本列會被hibernate 自動加 1。hibernate 通過對版本列的值進(jìn)行對比,如果版本值一致說明沒有并發(fā)放棄當(dāng)前操作??梢蕴峤粩?shù)據(jù),如果不一致說明存在并發(fā),2、悲觀鎖概念:對多用戶并發(fā)數(shù)據(jù)持悲觀態(tài)度。認(rèn)為一定會存在多用戶并發(fā)。所以在當(dāng)前用戶使用數(shù)據(jù)時,會 通過數(shù)據(jù)庫的底層機(jī)制,為操作的數(shù)據(jù)加鎖,避免多用戶存在。原理:寫鎖insert update delete 語句,數(shù)據(jù)庫自動的為操作的數(shù)據(jù)加入寫鎖,別的用戶就不能操作對應(yīng)的數(shù)據(jù)。讀鎖select * from xx for update注意1 查詢在某些特定的場景下 也是需要加入事務(wù)(控制鎖 保證并發(fā)訪問的安全)2 寫鎖排他 讀鎖共享hibernate 中的悲觀鎖的處理:1、增刪改這樣的操作,hibernate 不會進(jìn)行額外的的處理,數(shù)據(jù)庫會自動完成鎖的加入2、查詢加入鎖ses.get(.class,pk.LockMode.UPGRADE)ses.load(.class,pk.LockMode.UPGRADE)Query query = ses.createQuery(from Account

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論