1.什么是ORM
ORM,即Object-Relational Mapping(對象關系映射),它的作用是在關系型數據庫和業務實體對象之間作一個映射,這樣,我們在具體的操作業務對象的時候,就不需要再去和復雜的SQL語句打交道,只需簡單的操作對象的屬性和方法。
2.為什么會出現ORM思想
先從項目中數據流存儲形式這個角度說起.簡單拿MVC這種分層模式.來說. Model作為數據承載實體. 在用戶界面層和業務邏輯層之間數據實現面向對象OO形式傳遞. 當我們需要通過Control層分發請求把數據持久化時我們會發現. 內存中的面向對象的OO如何持久化成關系型數據中存儲一條實際數據記錄呢?
面向對象是從軟件工程基本原則(如耦合、聚合、封裝)的基礎上發展起來的,而關系數據庫則是從數學理論發展而來的. 兩者之間是不匹配的.而ORM作為項目中間件形式實現數據在不同場景下數據關系映射. 對象關系映射(Object Relational Mapping,簡稱ORM)是一種為了解決面向對象與關系數據庫存在的互不匹配的現象的技術.ORM就是這樣而來的.
3.優缺點
優勢
第一:隱藏了數據訪問細節,“封閉”的通用數據庫交互,ORM的核心。他使得我們的通用數據庫交互變得簡單易行,並且完全不用考慮該死的SQL語句。快速開發,由此而來。
第二:ORM使我們構造固化數據結構變得簡單易行。在ORM年表的史前時代,我們需要將我們的對象模型轉化為一條一條的SQL語句,通過直連或是DB helper在關系數據庫構造我們的數據庫體系。而現在,基本上所有的ORM框架都提供了通過對象模型構造關系數據庫結構的功能。這,相當不錯。
缺點
第一:無可避免的,自動化意味着映射和關聯管理,代價是犧牲性能(早期,這是所有不喜歡ORM人的共同點)。現在的各種ORM框架都在嘗試使用各種方法來減輕這塊(LazyLoad,Cache),效果還是很顯著的。
第二:面向對象的查詢語言(X-QL)作為一種數據庫與對象之間的過渡,雖然隱藏了數據層面的業務抽象,但並不能完全的屏蔽掉數據庫層的設計,並且無疑將增加學習成本.
第三:對於復雜查詢,ORM仍然力不從心。雖然可以實現,但是不值的。視圖可以解決大部分calculated column,case ,group,having,order by, exists,但是查詢條件(a and b and not c and (d or d))。
世上沒有驢是不吃草的(又想好又想巧,買個老驢不吃草),任何優勢的背后都隱藏着缺點,這是不可避免的。問題在於,我們是否能容忍缺點。
4.常用的ORM框架
(1)Hibernate全自動需要些hql語句
(2)iBATIS半自動自己寫sql語句,可操作性強,小巧
(3)EclipseLink 一個可擴展的支持JPA的ORM框架,供強大的緩存功能,緩存支持集群。
(4)Apache OJB等等