瞭解orm,先瞭解以下概念: 什麼是“持久化” 持久(Persistence),即把數據(如記憶體中的對象)保存到可永久保存的存儲設備中(如磁碟)。持久化的主要應用是將記憶體中的數據存儲在關係型的資料庫中,當然也可以存儲在磁碟文件中、XML數據文件中等等。 什麼是 “持久層” 持久層(Persisten ...
瞭解orm,先瞭解以下概念:
什麼是“持久化”
持久(Persistence),即把數據(如記憶體中的對象)保存到可永久保存的存儲設備中(如磁碟)。持久化的主要應用是將記憶體中的數據存儲在關係型的資料庫中,當然也可以存儲在磁碟文件中、XML數據文件中等等。
什麼是 “持久層”
持久層(Persistence Layer),即專註於實現數據持久化應用領域的某個特定系統的一個邏輯層面,將數據使用者和數據實體相關聯。
什麼是ORM
即Object-Relationl Mapping,它的作用是在關係型資料庫和對象之間作一個映射,這樣,我們在具體的操作資料庫的時候,就不需要再去和複雜的SQL語句打交道,只要像平時操作對象一樣操作它就可以了 。
為什麼要做持久化和ORM設計(重要)
在目前的企業應用系統設計中,MVC,即 Model(模型)- View(視圖)- Control(控制)為主要的系統架構模式。MVC 中的 Model 包含了複雜的業務邏輯和數據邏輯,以及數據存取機制(如 JDBC的連接、SQL生成和Statement創建、還有ResultSet結果集的讀取等)等。將這些複雜的業務邏輯和數據邏輯分離,以將系統的緊耦 合關係轉化為松耦合關係(即解耦合),是降低系統耦合度迫切要做的,也是持久化要做的工作。MVC 模式實現了架構上將表現層(即View)和數據處理層(即Model)分離的解耦合,而持久化的設計則實現了數據處理層內部的業務邏輯和數據邏輯分離的解耦合。 而 ORM 作為持久化設計中的最重要也最複雜的技術,也是目前業界熱點技術。
簡單來說,按通常的系統設計,使用 JDBC 操作資料庫,業務處理邏輯和數據存取邏輯是混雜在一起的。
一般基本都是如下幾個步驟:
1、建立資料庫連接,獲得 Connection 對象。
2、根據用戶的輸入組裝查詢 SQL 語句。
3、根據 SQL 語句建立 Statement 對象 或者 PreparedStatement 對象。
4、用 Connection 對象執行 SQL語句,獲得結果集 ResultSet 對象。
5、然後一條一條讀取結果集 ResultSet 對象中的數據。
6、根據讀取到的數據,按特定的業務邏輯進行計算。
7、根據計算得到的結果再組裝更新 SQL 語句。
8、再使用 Connection 對象執行更新 SQL 語句,以更新資料庫中的數據。
7、最後依次關閉各個 Statement 對象和 Connection 對象。
由上可看出代碼邏輯非常複雜,這還不包括某條語句執行失敗的處理邏輯。其中的業務處理邏輯和數據存取邏輯完全混雜在一塊。而一個完整的系統要包含成
千上萬個這樣重覆的而又混雜的處理過程,假如要對其中某些業務邏輯或者一些相關聯的業務流程做修改,要改動的代碼量將不可想象。另一方面,假如要換資料庫
產品或者運行環境也可能是個不可能完成的任務。而用戶的運行環境和要求卻千差萬別,我們不可能為每一個用戶每一種運行環境設計一套一樣的系統。
所
以就要將一樣的處理代碼即業務邏輯和可能不一樣的處理即數據存取邏輯分離開來,另一方面,關係型資料庫中的數據基本都是以一行行的數據進行存取的,而程式
運行卻是一個個對象進行處理,而目前大部分資料庫驅動技術(如ADO.NET、JDBC、ODBC等等)均是以行集的結果集一條條進行處理的。所以為解決
這一困難,就出現 ORM 這一個對象和數據之間映射技術。
常用ORM框架
Java系列:
- Apache OJB
- Cayenne
- Jaxor
- Hibernate
- iBatis
- jRelationalFramework
- mirage
- SMYLE
- TopLink
.Net系列:
- NHibernate
- NBear
- Castle ActiveRecord
- iBATIS.NET
- DAAB
- EntitysCodeGenerate
- EntityFormerWork
- Linq to sql
- PetaPoco
總結
ORM是通過使用描述對象和資料庫之間映射的元數據,將程式中的對象自動持久化到關係資料庫中。
ORM在業務邏輯層和資料庫層之間充當了橋梁的作用。
ORM的優勢:ORM解決的主要問題是對象和關係的映射
ORM提供了對資料庫的映射,不用直接編寫SQL代碼,只需像操作對象一樣從資料庫操作數據。
ORM的劣勢:在一定程度上犧牲程式的執行效率。
ORM是“對象-關係-映射”的簡稱
MVC或者MTV框架中包括一個重要的部分,就是ORM,它實現了數據模型與資料庫的解耦,即數據模型的設計不需要依賴於特定的資料庫。
ORM框架降低了學習門檻,一個對sql語句並不熟悉的開發人員也可以很容易通過簡易的ORM框架Api進行資料庫的操作。
提高了開發效率,ORM使我們減少很多繁瑣重覆的工作量,讓我們的註意力集中在實現業務上。
一定程度上提高了程式的響應速度。
ORM框架的弊端也很明顯,框架會自動生成Sql語句,所有場景的sql語句都是同一套模板,難以自動針對場景對sql語句進行良好的優化,某種場景下很容易生成執行很慢的sql語句。如果讓DBA看到這樣的執行sql,必定引來抓狂崩潰。
ORM框架只是為了滿足絕大多數的場景而生的,特殊需要優化sql的場景下,我們完全可以直接使用驅動手動執行sql或使用ORM框架內提供的sql語句api進行自定義sql語句。