ORM(Object-relational mapping),中文翻譯爲對象關係映射,是一種爲了解決面向對象與關係數據庫存在的互不匹配的現象的技術。簡單的說,ORM是經過使用描述對象和數據庫之間映射的元數據,將程序中的對象自動持久化到關係數據庫中。程序員
在程序開發中,數據庫保存的表,字段與程序中的實體類之間是沒有關聯的,在實現持久化時就比較不方便。那麼,到底如何實現持久化呢?一種簡單的方案是採用硬編碼方式,爲每一種可能的數據庫訪問操做提供單獨的方法。這種方案存在如下不足:算法
ORM提供了實現持久化層的另外一種模式,它採用映射元數據來描述對象關係的映射,使得ORM中間件能在任何一個應用的業務邏輯層和數據庫層之間充當橋樑sql
ORM的方法論基於三個核心原則:數據庫
本文以C#編程語言爲例,在傳統的數據讀取操做中,咱們以Ado.net的方式對數據庫進行CRUD操做,使用的基本都是SQL硬編碼,好比有如下數據庫查詢操做:編程
String sql = "SELECT ... FROM persons WHERE id = 10"; DbCommand cmd = new DbCommand(connection, sql); Result res = cmd.Execute(); String name = res[0]["FIRST_NAME"];
使用了ORM映射的C#實現的僞代碼:app
Person p = repository.GetPerson(10); String name = p.getFirstName();
上面的示例代碼表示咱們能夠從數據倉庫repository中獲取到一個實體對象,固然數據倉庫中可能包含其餘的方法,你也能夠定義本身的ORM實現,好比:編程語言
Person p = Person.Get(10);
一般,在處理ORM映射和數據倉庫時會暴露一些過濾或者查詢方法,容許客戶端對數據集進行進一步的篩選等操做,好比代碼演示從數據庫中查詢ID=10的用戶:性能
Person p = Person.Get(Person.Properties.Id == 10);
與傳統的數據庫訪問技術相比,ORM有如下優勢:編碼
從系統結構上來看,採用ORM的系統通常都是多層系統,系統的層次多了,效率就會下降。ORM是一種徹底的面向對象的作法,而面向對象的作法也會對性能產生必定的影響。.net
在咱們開發系統時,通常都有性能問題。性能問題主要產生在算法不正確和與數據庫不正確的使用上。ORM所生成的代碼通常不太可能寫出很高效的算法,在數據庫應用上更有可能會被誤用,主要體如今對持久對象的提取和和數據的加工處理上,若是用上了ORM,程序員頗有可能將所有的數據提取到內存對象中,而後再進行過濾和加工處理,這樣就容易產生性能問題。
做爲一名編程人員,在ORM使用的觀念上會有不一樣,具體取捨需根據具體的項目和場景。
本文同步發表至 碼友網 《什麼是ORM?爲何用ORM?淺析ORM的使用及利弊》