數(shù)據(jù)庫技術(shù)已經(jīng)成為企業(yè)信息平臺的核心。應(yīng)用程序必須將業(yè)務(wù)相關(guān)的數(shù)據(jù)通過一定方式持久化到數(shù)據(jù)庫,還應(yīng)能夠從數(shù)據(jù)庫獲取已有的數(shù)據(jù),以適當(dāng)?shù)男问教峁┙o客戶或支撐系統(tǒng)的運行。
關(guān)鍵點:如何高效地存取數(shù)據(jù)、簡化編程模型、降低應(yīng)用的復(fù)雜度
在系統(tǒng)中引入持久層,負(fù)責(zé)所有相關(guān)數(shù)據(jù)的持久化操作,可以為整個應(yīng)用系統(tǒng)提供一個高層、統(tǒng)一、安全、并發(fā)的數(shù)據(jù)持久機制。
1、對象持久化技術(shù)
1-1、Java 對象序列化
序列化是 Java 語言中內(nèi)置的輕量級數(shù)據(jù)持久化機制,該機制可以將任何實現(xiàn)了 java.io.Serializable 接口的對象轉(zhuǎn)化為連續(xù)的字節(jié)流數(shù)據(jù),保存在文件中,或者通過網(wǎng)絡(luò)進(jìn)行傳輸。這些數(shù)據(jù)日后可被還原為原先的對象狀態(tài)。
缺點:局限性大,查詢只能返回數(shù)據(jù)流的下一個對象,不提供部分的讀取和更新,不提供對象的生命周期管理,只是簡單的讀取和寫入,不提供并發(fā)和事務(wù)特性。
1-2、使用 JDBC
JDBC(Java Database Connectivity)是用來訪問關(guān)系數(shù)據(jù)庫系統(tǒng)的標(biāo)準(zhǔn) Java API。JDBC 只是提供訪問數(shù)據(jù)的接口,其底層實現(xiàn)有特定的數(shù)據(jù)庫廠商實現(xiàn)。
缺點:直接使用 JDBC 實現(xiàn)持久化時,SQL 語句和應(yīng)用代碼混雜在一起,邏輯混亂。另外直接使用 SQL 操作數(shù)據(jù)庫,不是面向?qū)ο蟆?/p>
1-3、使用 JDO
Java 數(shù)據(jù)對象(Java Data Object)是 JCP(Java Community Process)發(fā)布的一個規(guī)范,是 Java 對象持久化的標(biāo)準(zhǔn)。JDO 僅定義了標(biāo)準(zhǔn)的編程接口,而把關(guān)系映射的定義留給軟件供應(yīng)商實現(xiàn)。
1-4、實體 EJB
實體 EJB(Enterpise Java Bean)是 Java 領(lǐng)域的數(shù)據(jù)持久化標(biāo)準(zhǔn)。
1-5、對象關(guān)系映射
對象關(guān)系映射(Ojbect Relation Mapping)在對象模型和關(guān)系模型之間建立溝通的橋梁。ORM 技術(shù)封裝了數(shù)據(jù)持久化的操作細(xì)節(jié),為應(yīng)用程序提供了一只訪問的接口,使應(yīng)用程序可以專注于業(yè)務(wù)邏輯的處理。它采用 POJO(Plain Old Java Object,簡單的傳統(tǒng)對象)作為域?qū)ο蟮谋硎?,不涉及域?qū)ο笾獾募夹g(shù)細(xì)節(jié),降低的 ORM 技術(shù)的侵入性,實現(xiàn)簡單,便于測試,具備高擴(kuò)展性。
2、對象關(guān)系映射模型
一個完整的對象關(guān)系映射框架,應(yīng)具備以下四個方面:
①、一個元數(shù)據(jù)映射規(guī)范,負(fù)責(zé)持久化類、類屬性的數(shù)據(jù)庫表、字段的映射,實現(xiàn)對象和關(guān)系的語義連接。
②、一組對象操作接口,用于完成數(shù)據(jù)的增加、刪除、修改和更新等操作。
③、一種面向?qū)ο蟮牟樵冋Z言,該語言能理解繼承、多態(tài)和關(guān)聯(lián)等面向?qū)ο筇匦裕瑢崿F(xiàn)基于對象的查詢并在對象之間導(dǎo)航。
④、一系列與數(shù)據(jù)庫現(xiàn)關(guān)的技術(shù)實現(xiàn)和最佳實踐,保證系統(tǒng)的完整性并提高系統(tǒng)的可用性和擴(kuò)展性。比如:事務(wù)、緩存和數(shù)據(jù)抓取策略等。
對象模型(類、屬性、關(guān)聯(lián)) <==> 關(guān)系模型(表、字段、約束)
ps. <Hibernate 完全手冊>
ISBN 978-7-111-23764-8
機械工業(yè)出版社
侯志松 余周 鄭煥 等編著