【正文】
m o ne t o n g w o r k f l o w e n g i n ee t o n g y a x i aetongmon的依賴(lài)關(guān)系 e t o n g c o m m o nh i b e r n a t e 2 . 1 . 8h t m l p a r s e rd o m 4 j 1 . 4c o m m o n s l a n g 2 . 0 . j a retongmon的內(nèi)部體系 u t i lh i b e r n a tp e r s i s t e n c eh t m lj u n i t持久包 — 通用的持久化類(lèi)設(shè)計(jì) S e r v i c e F a c t o r yC o m m o n D a o+ m a k e P e r s i s t e n t ( )+ m a k e T r a n s i e n t ( ) 接 口 S e r v i c e P e r s i s t e n c eS e r v i c e P e r s i s t e n c e I m p l優(yōu)化設(shè)計(jì)后的代碼 ? User user = new User()。 參考書(shū)籍 ? Hibernate In Action——CHRISTIAN BAUER、 GAVIN KING ? Patterns of Enterprise Application Architecture (企業(yè)應(yīng)用架構(gòu)模式 )——Martin Fowle ? 深入淺出 Hibernate——夏昕、曹曉鋼 。 ? saveupdate:如果 item被持久化,那么所有被item所 reference的 bid都應(yīng)該被持久化。 ? 在理想的環(huán)境中: root對(duì)象被加載,那么整個(gè)對(duì)象樹(shù)在任何時(shí)候都可以被重新建立。這樣可以在多個(gè)層面中傳遞這些持久對(duì)象。 ? hibernate對(duì) persistent對(duì)象提供與數(shù)據(jù)庫(kù)的同步支持和事務(wù)支持。 目 錄 ? 持久層的概念及必要性 ? hibernate框架及核心類(lèi)介紹 ? hibernate進(jìn)行持久化的一個(gè)例子 ? hibernate如何解決對(duì)象和模型的不匹配 ? 對(duì)象的持久性生命周期 ? 對(duì)目前項(xiàng)目的進(jìn)一步封裝和思考 對(duì)象的持久生命周期 ? 持久類(lèi)和一般類(lèi)只有概念上的區(qū)別,從代碼上看沒(méi)有區(qū)別,持久類(lèi)不知道自己的持久狀態(tài),所有的業(yè)務(wù)邏輯也與對(duì)象是在內(nèi)存中還是在數(shù)據(jù)庫(kù)中無(wú)關(guān)。 cascading save ? 當(dāng)我們把 bid加入到 item, 并且把 item持久化的時(shí)候, 我們希望 bid能夠自動(dòng)的 持久化,而不用顯示的去調(diào)用。 hibernate會(huì)認(rèn)為是兩個(gè)不同的持久類(lèi)發(fā)生了變動(dòng),它并不知道這兩個(gè)變動(dòng)實(shí)際上是指向同一個(gè)數(shù)據(jù)庫(kù)的字段, hibernate會(huì)更新兩次。 映射文件格式 繼承策略選擇 ? 一般原則:如果你不需要多態(tài)查詢(xún),可以考慮用 tableperconcreteclass,如果你需要多態(tài)查詢(xún),并且子類(lèi)的屬性差異不大,考慮用 tableperclasshierarchy,但是如果子類(lèi)的屬性差異很大,考慮用 tablepersubclass。 父類(lèi)的變動(dòng)很方便。 映射文件的格式 Subtypes—— 子類(lèi)型問(wèn)題 對(duì)象模型存在“ is a”和“ has a”的關(guān)系,而關(guān)系模型僅僅存在“ has a”的關(guān)系,這是對(duì)象模型和關(guān)系模型最明顯的 mismatch,如何將“ is a”轉(zhuǎn)化為數(shù)據(jù)庫(kù)中的“ has a”是 hibernate需要解決的問(wèn)題。 sendMessage() 這種細(xì)粒度的設(shè)計(jì)更好的體現(xiàn)了類(lèi)的內(nèi)聚性,體現(xiàn)了對(duì)象設(shè)計(jì)的職責(zé)分配原則:將職責(zé)分配給擁有履行一個(gè)職責(zé)所必需信息的類(lèi) 。 ? :用一個(gè) 128bit的 UUID算法生成字符串類(lèi)型的標(biāo)識(shí)符。業(yè)務(wù)邏輯和數(shù)據(jù)邏輯位于不同的層面,應(yīng)該有清晰的界定,不要把業(yè)務(wù)邏輯牽扯到數(shù)據(jù)邏輯中,否則業(yè)務(wù)邏輯的變化將對(duì)數(shù)據(jù)邏輯產(chǎn)生根本的影響。 ? 對(duì)象的相等性( equality): java API定義的方法。 ? 為 web、 ejb、 struts、 webwork、 hibernate、jdo、 jmx等等生成描述文件、源碼等。 (dep)。 Department dep = (Department)(, depID)。 (dep)。 ? Transaction tx = ()。 ? SessionFactory sessionFactory = ()。 持久層對(duì)于業(yè)務(wù)層是透明的,持久層和業(yè)務(wù)層的變化是彼此獨(dú)立的。 ? 這些代碼基本上都是“支撐性”代碼,單調(diào)、機(jī)械、乏味、不優(yōu)雅。對(duì)象 /關(guān)系映射 — Hibernate ? 學(xué)員要求 :熟悉 Java、 SQL、 JDBC,掌握面向?qū)ο蟮?開(kāi)發(fā) 方法,并有實(shí)際項(xiàng)目開(kāi)發(fā)經(jīng)驗(yàn) ? 課程目標(biāo): 理解 O/R Mapping原理,掌握Hibernate開(kāi)發(fā)的相關(guān)知識(shí),并能使用Hibernate進(jìn)行實(shí)際項(xiàng)目開(kāi)發(fā) 作者:趙青 目 錄 ? 持久層的概念及必要性 ? hibernate框架及核心類(lèi)介紹 ? hibernate進(jìn)行持久化的一個(gè)例子 ? hibernate如何解決對(duì)象和模型的不匹配 ? 對(duì)象的持久性生命周期 ? 對(duì)目前項(xiàng)目的進(jìn)一步封裝和思考 數(shù)據(jù)的持久化 dcba數(shù) 據(jù) 庫(kù) 消 息 隊(duì) 列文 件 系 統(tǒng)內(nèi) 存 中 的 數(shù) 據(jù)持久化 ?持久層 持久化如何演變?yōu)槌志脤樱? 是不是只要在應(yīng)用中用了數(shù)據(jù)庫(kù)就天然具備了“持久層”了呢?未必! 只有持久化而沒(méi)有持久層 網(wǎng)上商城購(gòu)物結(jié)算的例子 c u s t o m e rP K i d l e v e l s u m _ a m o u n tp r o m o t i o nP K i d l e v e l r a t i o沒(méi)有持久層的特征 ? 業(yè)務(wù)邏輯和數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)邏輯混雜在一起,沒(méi)有清晰的界限,干擾了我們的視線(xiàn),難于理解。 改良后的代碼 觀(guān)察 DAO的實(shí)現(xiàn)細(xì)節(jié) 問(wèn)題的癥狀 用 JDBC實(shí)現(xiàn)持