之前就聽說過數據持久化操作這類的詞,雖然使用過一點點相關的內容,比如Hibernate中的session這個事物管理器,但一直不理解數據持久化的含義和原理方面,所以在查找了一定的資料后,我總結出了以下內容。
- 什么是持久化呢?
持久化的含義就是把內存中的數據(比如內存中的對象——用對象來封裝數據)保存到可永久保存的存儲設備或關系型數據庫中(常見關系型數據庫有:mysql,oracle,sqlserver等)。那么持久層的定義也就很明顯了,持久層就是在某個系統中專門實現數據持久化的一個邏輯層面,將數據使用者與數據實體相關聯——對象數據映射。
- 什么是對象數據映射呢?
ORM-Object/Relational Mapper——“對象-關系型數據庫映射組件”,即在面向對象開發語言(比如java)中的對象與關系型數據庫之間建立映射。這就要求需要使用面向對象的開發語言和關系型數據庫進行開發。
備注:建模領域中的 ORM 為Object/Role Modeling(對象角色建模)。另外這里是“O/R Mapper”而非“O/R Mapping”。相對來講,O/R Mapping 描述的是一種設計思想或者實現機制,而 O/R Mapper指以O/R原理設計的持久化框架(Framework),包括 O/R機制還有 SQL自生成,事務處理,Cache管理等。
所以,綜合以上的內容可以大致這樣理解:數據持久化就是一種操作對象和關系型數據庫之間聯系的機制。用比較官方的語言來說,數據持久化就是將內存中的數據模型轉換為存儲模型,以及將存儲模型轉換為內存中的數據模型的統稱。
在這塊我再強行舉個例子,比如使用過mvc框架的同學,通過對配置文件(如:servletcontext)等內容的更改,可以讓我們方便的鏈接到不同的數據庫,並且可以讓我們方便的將model對象與數據庫進行綁定或者說是映射,然后可以通過一些ORM組件,比如Hibernate,可以方便的對數據庫進行增刪改查等操作,不用寫很多的sql語句,直接通過組件就可以自動生成。
- 使用數據持久化的好處:
- 持久化技術封裝了數據訪問細節,為大部分業務邏輯提供面向對象的API。
- 通過持久化技術可以減少訪問數據庫數據次數,增加應用程序執行速度;
- 代碼重用性高,能夠完成大部分數據庫操作;
- 松散耦合,使持久化不依賴於底層數據庫和上層業務邏輯實現,更換數據庫時只需修改配置文件而不用修改代碼
- 為什么要做持久化和ORM設計:
在目前的企業應用系統設計中,MVC,即 Model(模型)- View(視圖)-Control(控制)為主要的系統架構模式。MVC 中的Model 包含了復雜的業務邏輯和數據邏輯,以及數據存取機制(如 JDBC的連接、SQL生成和Statement創建、還有ResultSet結果集的讀取等)等。將這些復雜的業務邏輯和數據邏輯分離,以將系統的緊耦合關系轉化為松耦合關系(即解耦合),是降低系統耦合度迫切要做的,也是持久化要做的工作。MVC 模式實現了架構上將表現層(即View)和數據處理層(即Model)分離的解耦合,而持久化的設計則實現了數據處理層內部的業務邏輯和數據邏輯分離的解耦合。而 ORM 作為持久化設計中的最重要也最復雜的技術,也是目前業界熱點技術。
簡單來說,按通常的系統設計,使用 JDBC 操作數據庫,業務處理邏輯和數據存取邏輯是混雜在一起的。