摘要:如果數(shù)據(jù)非常類似,可把數(shù)據(jù)從內(nèi)存方案中轉(zhuǎn)化到邏輯數(shù)據(jù)存儲方案,映射從邏輯數(shù)據(jù)存儲方案到實際物理存儲方案第二部包含區(qū)別使用元數(shù)據(jù)元數(shù)據(jù)映射基于把映射濃縮到元數(shù)據(jù)文件的方法。元數(shù)據(jù)文件詳細(xì)描述數(shù)據(jù)庫中列如何映射到對象的域。
關(guān)系數(shù)據(jù)庫之所以取得成功,最重要的原因之一就是SQL的存在,它是數(shù)據(jù)庫通信標(biāo)準(zhǔn)語言。
1. 架構(gòu)模式: 驅(qū)動領(lǐng)域邏輯訪問數(shù)據(jù)的方式: SQL語句嵌入在程序設(shè)計語言中; 行數(shù)據(jù)入口、表數(shù)據(jù)入口:把SQL訪問從領(lǐng)域邏輯中分離出來,并把它放到獨立的類中(讓它們以數(shù)據(jù)庫中的表結(jié)構(gòu)為基礎(chǔ),每一個數(shù)據(jù)表對應(yīng)一個類),這些類為數(shù)據(jù)庫建立了一個入口;
活動記錄:領(lǐng)域模型簡單時,每個領(lǐng)域?qū)ο筘?fù)責(zé)對應(yīng)數(shù)據(jù)庫的表的存取過程
數(shù)據(jù)映射器:領(lǐng)域模型復(fù)雜時,處理數(shù)據(jù)庫和領(lǐng)域模型之間的所有存取操作,并且允許雙方都能獨立變化
面向?qū)ο髷?shù)據(jù)庫:領(lǐng)域模型不管有多復(fù)雜,均可使用(因為風(fēng)險,使用不多)。主要好處在于能夠提高生產(chǎn)率!
2. 行為問題: 1)所謂行文問題,就是如何讓個中對象從數(shù)據(jù)庫中讀取出來以及存到數(shù)據(jù)庫中 2)工作單元:充當(dāng)數(shù)據(jù)庫映射的控制器,會跟蹤所有從數(shù)據(jù)庫中讀取的對象以及所有以任何形式修改過的對象,并將更新提交到數(shù)據(jù)庫(用來解決內(nèi)存對象和數(shù)據(jù)庫中數(shù)據(jù)同步的問題)
3)標(biāo)識映射:在標(biāo)識映射里記錄讀取的每一行,防止同一對象重復(fù)加載
4)延遲加載:減少領(lǐng)域模型每次讀取的數(shù)據(jù)
3. 讀取數(shù)據(jù): 1)查找器:讀取數(shù)據(jù)的時候,可以把讀取數(shù)據(jù)的方法看做一個查找器
2)查找器對象:如果數(shù)據(jù)庫交互類基于表,把插入和更新操作也綁定在查找器方法中;
如果數(shù)據(jù)庫交互基于行的類,創(chuàng)建獨立的查找器對象(每個查找器類都有很多封裝了SQL語句的方法,當(dāng)執(zhí)行查詢操作時查找器對象返回一個適當(dāng)?shù)幕谛械膶ο蠹希?/p> 3)讀取數(shù)據(jù)性能經(jīng)驗法則:
如果需要,盡量一次讀取多行;
需要多個表數(shù)據(jù)時,使用Join
4. 結(jié)構(gòu)映射模式: 1)關(guān)系的映射: 解決關(guān)系表間關(guān)聯(lián)關(guān)系和對象間引用關(guān)系的方法:通過對象中的一個標(biāo)識域來保持每個對象的關(guān)系特性,并且通過查找這些值來保持對象引用和關(guān)系鍵之間的相互映射
對于一些小的值對象(比如日期范圍和錢),不需要用標(biāo)識域來把對象間引用變?yōu)橥怄I(不應(yīng)該描述成數(shù)據(jù)庫中它們自己的表),而應(yīng)去除值對象中所有的域,以嵌入值方式把它們嵌入到關(guān)聯(lián)對象中
也可以通過序列化LOB將一組對象存儲為表中的單個列
2)繼承: 單表繼承:為繼承體系層次中的所有類建立一個表(修改容易并且避免join,但每一行都必須為每種可能地子類博阿六一些列,浪費空間)
具體表繼承:為繼承體系層次中每個具體類均建立一個表(避免join操作,允許從一個表中獲取一個對象,但改變起來比較困難,如對超類的任何改變都不得不改變所有的表和映射代碼)
類表繼承:為繼承體系層次中每個類均建立一個表(需要多個join操作來載入一個對象,通常
會損失性能)
以上3種模式,需要考慮自己的環(huán)境和偏好(Martin傾向于:使用單表繼承,用另外2個模式輔助來幫助解決不可避免的不相關(guān)和無用列問題)
5. 建立映射: 自己選擇數(shù)據(jù)庫方案:使用經(jīng)典數(shù)據(jù)庫設(shè)計技術(shù)圍繞數(shù)據(jù)來設(shè)計表,使用行數(shù)據(jù)入口或者表數(shù)據(jù)入口把SQL從領(lǐng)域邏輯中剔除
使用已存在數(shù)據(jù)庫方案:簡單的領(lǐng)域邏輯可創(chuàng)建行數(shù)據(jù)入口或者表數(shù)據(jù)入口類來模擬數(shù)據(jù)庫,并在此之上創(chuàng)建領(lǐng)域邏輯。復(fù)雜的逐步建立領(lǐng)域模型并包含數(shù)據(jù)映射器
對于多個數(shù)據(jù)源:建立多個映射層,每個數(shù)據(jù)源一個。 如果數(shù)據(jù)非常類似,可把數(shù)據(jù)從內(nèi)存方案中轉(zhuǎn)化到邏輯數(shù)據(jù)存儲方案,映射從邏輯數(shù)據(jù)存儲方案到實際物理存儲方案(第二部包含區(qū)別)
6. 使用元數(shù)據(jù):元數(shù)據(jù)映射基于把映射濃縮到元數(shù)據(jù)文件的方法。元數(shù)據(jù)文件詳細(xì)描述數(shù)據(jù)庫中列如何映射到對象的域。如:
數(shù)據(jù)庫連接池
8. 其他問題:select * from 的問題
多使用預(yù)編譯好的靜態(tài)SQL
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/30018.html
元數(shù)據(jù)映射 (Metadata Mapping) 查詢對象 (Query Object) 資源庫 (Repository)
摘要:工作單元用于維護受業(yè)務(wù)事務(wù)影響的對象列表,并協(xié)調(diào)變化的寫入和并發(fā)問題的解決。工作單元控制器工作單元控制所有數(shù)據(jù)庫的讀操作,一旦對象被讀取,將將它注冊為干凈的對象。 1. 工作單元 用于維護受業(yè)務(wù)事務(wù)影響的對象列表,并協(xié)調(diào)變化的寫入和并發(fā)問題的解決。如下: showImg(https://segmentfault.com/img/remote/1460000018095222?w=162...
摘要:大家好,我是冰河有句話叫做投資啥都不如投資自己的回報率高。馬上就十一國慶假期了,給小伙伴們分享下,從小白程序員到大廠高級技術(shù)專家我看過哪些技術(shù)類書籍。 大家好,我是...
摘要:標(biāo)識域外鍵映射關(guān)聯(lián)表映射依賴映射嵌入值序列化單表繼承類表繼承具體表繼承繼承映射器 1.標(biāo)識域 (Identity Field) 2.外鍵映射 (Foreign Key Mapping) 3.關(guān)聯(lián)表映射 (Association Table Mapping) 4.依賴映射 (Dependent Mapping) 5.嵌入值 (Embedded Value) 6.序列化LOB (Seral...
摘要:推出數(shù)據(jù)集成服務(wù),可輕松幫助用戶完成多源聚合。數(shù)據(jù)集成服務(wù)案例數(shù)據(jù)脫敏某教育企業(yè),使用數(shù)據(jù)集成服務(wù),將數(shù)據(jù)脫敏處理后,再交由內(nèi)部其它部進行數(shù)據(jù)分析,提取數(shù)據(jù)的有效價值。既避免了敏感數(shù)據(jù)泄漏風(fēng)險,又幫助企業(yè)更快更精準(zhǔn)的決策。背景由于不同業(yè)務(wù)的數(shù)據(jù)存儲和應(yīng)用需求不同,企業(yè)通常會將不同業(yè)務(wù)產(chǎn)生的數(shù)據(jù)分別存儲在獨立的數(shù)據(jù)庫中。隨著業(yè)務(wù)架構(gòu)的不斷調(diào)整,以及受開發(fā)過程的影響,原先分開存儲的數(shù)據(jù)庫逐漸暴露...
閱讀 3417·2021-09-30 09:54
閱讀 3945·2021-09-22 15:01
閱讀 3170·2021-08-27 16:19
閱讀 2634·2019-08-29 18:39
閱讀 2287·2019-08-29 14:09
閱讀 681·2019-08-26 10:23
閱讀 1405·2019-08-23 12:01
閱讀 1961·2019-08-22 13:57