1. 程式人生 > >持久層技術總結

持久層技術總結

持久是相對於瞬時來說的,持久層,可以理解成資料儲存在資料庫或者硬碟一類可以儲存很長時間的裝置裡面,不像放在記憶體中那樣斷電就消失了,也就是把資料存在持久化裝置上 。

企業應用中,資料很重要(各種訂單資料、客戶資料、庫存資料之類的),比應用程式本身更重要, 所以需要把資料持久化。現在大資料時代,可以說不僅是企業應用,幾乎所有應用都是需要持久層支援的。持久化可以通過很多方式,寫檔案和資料庫都可以。只是現在企業一般都會選擇把資料持久化到資料庫中,因為可以很方便的查詢統計分析,但資料庫的資料最終還是會寫到磁碟上的。Java 程式設計師為了操作資料庫, 最開始是使用JDBC

來進行的,但是這種方式開發效率低 ,要寫一堆重複程式碼,加上關係資料庫和物件本身存在所謂的阻抗不匹配情況,所以 為了提高開發效率,有人發明了 ORM 即 物件關係對映框架(Hibernate是其中的佼佼者),對於 Java 程式設計師來說,就可以通過操縱物件來操縱資料庫了。

ORM是什麼?

物件關係對映(Object Relational Mapping,簡稱ORM)模式是一種為了解決面向物件與關係資料庫存在的互不匹配的現象的技術。簡單的說,ORM是通過使用描述物件和資料庫之間對映的元資料,將程式中的物件自動持久化到關係資料庫中。

ORM提供了實現持久化層的另一種模式,它採用對映元資料來描述物件關係的對映,使得ORM中介軟體能在任何一個應用的業務邏輯層和資料庫層之間充當橋樑。Java典型的ORM中介軟體有:Hibernate,ibatis(現在的MyBatis),speedframework。

 
        ORM的方法論基於三個核心原則: 
  · 簡單:以最基本的形式建模資料。 
  · 傳達性:資料庫結構被任何人都能理解的語言文件化。 
  · 精確性:基於資料模型建立正確標準化了的結構


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

ORM的優缺點 

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

        在我們開發系統時,一般都有效能問題。效能問題主要產生在演算法不正確和與資料庫不正確的使用上。ORM所生成的程式碼一般不太可能寫出很高效的演算法,在資料庫應用上更有可能會被誤用,主要體現在對持久物件的提取和和資料的加工處理上,如果用上了ORM,程式設計師很有可能將全部的資料提取到記憶體物件中,然後再進行過濾和加工處理,這樣就容易產生效能問題。 
        在對物件做持久化時,ORM一般會持久化所有的屬性,有時,這是不希望的。 
        但ORM是一種工具,工具確實能解決一些重複,簡單的勞動。這是不可否認的。但我們不能指望工具能一勞永逸的解決所有問題,有些問題還是需要特殊處理的,但需要特殊處理的部分對絕大多數的系統,應該是很少的。

不使用ORM可以嗎?

不通過ORM實現持久化,一種簡單的方案是採用硬編碼方式,為每一種可能的資料庫訪問操作提供單獨的方法。 
        這種方案存在以下不足: 
        1.持久化層缺乏彈性。一旦出現業務需求的變更,就必須修改持久化層的介面 
        2.持久化層同時與域模型與關係資料庫模型繫結,不管域模型還是關係資料庫模型發生變化,毒藥修改持久化曾的相關程式程式碼,增加了軟體的維護難度。 

ORM實現原理總體來說就是使用代理,參考:https://blog.csdn.net/maibaodexiaoerlang/article/details/79614710