1. 程式人生 > >什麽是ORM

什麽是ORM

cti 能夠 對象信息 持久化類 enc 代碼 固定 sql 更新數據

一、ORM簡介
對象關系映射(Object Relational Mapping,簡稱ORM)模式是一種為了解決面向對象與關系數據庫存在的互不匹配的現象的技術。簡單的說,ORM是通過使用描述對象和數據庫之間映射的元數據,將程序中的對象自動持久化到關系數據庫中。那麽,到底如何實現持久化呢?一種簡單的方案是采用硬編碼方式,為每一種可能的數據庫訪問操作提供單獨的方法。
這種方案存在以下不足:
1.持久化層缺乏彈性。一旦出現業務需求的變更,就必須修改持久化層的接口
2.持久化層同時與域模型與關系數據庫模型綁定,不管域模型還是關系數據庫模型發生變化,毒藥修改持久化曾的相關程序代碼,增加了軟件的維護難度。

    ORM提供了實現持久化層的另一種模式,它采用映射元數據來描述對象關系的映射,使得ORM中間件能在任何一個應用的業務邏輯層和數據庫層之間充當橋梁。Java典型的ORM中間件有:Hibernate,ibatis,speedframework。 
    ORM的方法論基於三個核心原則: 

  · 簡單:以最基本的形式建模數據。
  · 傳達性:數據庫結構被任何人都能理解的語言文檔化。
  · 精確性:基於數據模型創建正確標準化了的結構。

二、ORM的概念
讓我們從O/R開始。字母O起源於"對象"(Object),而R則來自於"關系"(Relational)。幾乎所有的程序裏面,都存在對象和關系數據庫。在業務邏輯層和用戶界面層中,我們是面向對象的。當對象信息發生變化的時候,我們需要把對象的信息保存在關系數據庫中。

當你開發一個應用程序的時候(不使用O/R Mapping),你可能會寫不少數據訪問層的代碼,用來從數據庫保存,刪除,讀取對象信息,等等。你在DAL中寫了很多的方法來讀取對象數據,改變狀態對象等等任務。而這些代碼寫起來總是重復的。

    ORM解決的主要問題是對象關系的映射。域模型和關系模型分別是建立在概念模型的基礎上的。域模型是面向對象的,而關系模型是面向關系的。一般情況下,一個持久化類和一個表對應,類的每個實例對應表中的一條記錄,類的每個屬性對應表的每個字段。 
    ORM技術特點: 
    1.提高了開發效率。由於ORM可以自動對Entity對象與數據庫中的Table進行字段與屬性的映射,所以我們實際可能已經不需要一個專用的、龐大的數據訪問層。 
    2.ORM提供了對數據庫的映射,不用sql直接編碼,能夠像操作對象一樣從數據庫獲取數據。 

三、ORM的優缺點
ORM的缺點是會犧牲程序的執行效率和會固定思維模式。
從系統結構上來看,采用ORM的系統一般都是多層系統,系統的層次多了,效率就會降低。ORM是一種完全的面向對象的做法,而面向對象的做法也會對性能產生一定的影響。

    在我們開發系統時,一般都有性能問題。性能問題主要產生在算法不正確和與數據庫不正確的使用上。ORM所生成的代碼一般不太可能寫出很高效的算法,在數據庫應用上更有可能會被誤用,主要體現在對持久對象的提取和和數據的加工處理上,如果用上了ORM,程序員很有可能將全部的數據提取到內存對象中,然後再進行過濾和加工處理,這樣就容易產生性能問題。 
    在對對象做持久化時,ORM一般會持久化所有的屬性,有時,這是不希望的。 
    但ORM是一種工具,工具確實能解決一些重復,簡單的勞動。這是不可否認的。但我們不能指望工具能一勞永逸的解決所有問題,有些問題還是需要特殊處理的,但需要特殊處理的部分對絕大多數的系統,應該是很少的。
  • 什麽是“持久化”
    持久(Persistence),即把數據(如內存中的對象)保存到可永久保存的存儲設備中(如磁盤)。持久化的主要應用是將內存中的數據存儲在關系型的數據庫中,當然也可以存儲在磁盤文件中、XML數據文件中等等。

按通常的系統設計,使用 ,操作數據庫,業務處理邏輯和數據存取邏輯是混雜在一起的。
一般基本都是如下幾個步驟:
1、建立數據庫連接,獲得 Connection 對象。
2、根據用戶的輸入組裝查詢 SQL 語句。
3、根據 SQL 語句建立 Statement 對象 或者 PreparedStatement 對象。
4、用 Connection 對象執行 SQL語句,獲得結果集 ResultSet 對象。
5、然後一條一條讀取結果集 ResultSet 對象中的數據。
6、根據讀取到的數據,按特定的業務邏輯進行計算。
7、根據計算得到的結果再組裝更新 SQL 語句。
8、再使用 Connection 對象執行更新 SQL 語句,以更新數據庫中的數據。
7、最後依次關閉各個 Statement 對象和 Connection 對象。
這樣操作會很復雜,而ORM將這些復雜的操作簡單化,只需要生成一個對象,對這個對象進行操作,自動就會轉換成SQL語句,去數據庫進行操作,再將返回的結果從新轉換成對象

什麽是ORM