进阶面试的必看的ORM架构之 ORM简介
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等等
5、目前代碼中的ORM都有哪些
1 .C#中的ORM框架
- SqlSugar (國內)
- Dos.ORM (國內)
- Chloe (國內)
- StackExchange/Dapper (國外)
- Entity Framework (EF) (國外)
- NHibernate (國外)
- ServiceStack/ServiceStack.OrmLite (國外)
- linq2db (國外)
- Massive (國外)
- PetaPoco (國外)
2. SqlSugar
SqlSugar是國人開發者開發的一款基于.NET的ORM框架,是可以運行在.NET 4.+ & .NET CORE的高性能、輕量級 ORM框架,眾多.NET框架中最容易使用的數據庫訪問技術。
- 特點:
- 開源、免費
- 國內開發者開發、維護;
- 支持.NET Core;
- 支持主流數據庫,如:SQL Server,MySql,Oracle,Sqlite等;
- 維護更新及時
3. PetaPoco
PetaPoco:輕量的POCO對象和數據庫映射的ORM框架。
- 特點:
- 開源、免費
4. linq2db
linq2db也是一款快速、輕量、類型安全的POCO對象和數據庫映射的ORM框架。從構架上來說,linq2db是對比如:Dapper、PetaPoco這個的微ORM的進一步封裝,但它不像Entity Framework那樣笨重。它沒有實現狀態跟蹤,需要自己處理實體的狀態更改等。
5. Dos.ORM
Dos.ORM(原Hxj.Data)于2009年發布,2015年正式開源。在開發過程中參考了NBear與MySoft,吸取了他們的一些精華,加入新思想,同時參考EF的Lambda語法進行大量擴展。該組件已在數百個成熟項目中應用。官方網站:
http://ITdos.com/Dos/ORM/Index.html
- 特點:
- 開源、免費
- 上手簡單,0學習成本。使用方便,按照sql書寫習慣編寫C#.NET代碼。功能強大
- 高性能,接近手寫Sql
- 體積小(不到150kb,僅一個dll)
- 完美支持Sql Server(2000至最新版),MySql,Oracle,Access,Sqlite等數據庫
- 支持大量Lambda表達式寫法,國產ORM支持度最高,開源中國ORM排行前三
- 不需要像NHibernate的XML配置,不需要像EF的各種數據庫連接驅動
- 遵循MIT開源協議,除不允許改名,其它隨意定制修改
6. ServiceStack.OrmLite
ServiceStack.OrmLite的目標是提供一種方便,無干擾,無配置的RDBMS無關類型的封裝,與SQL保持高度的契合,展現直觀的API,可以生成可預測的SQL。
ServiceStack.OrmLite的宗旨:Fast, Simple, Typed ORM for .NET
- 特點:
- 開源、收費(免費版只支持單個庫10張表)
7. Entity Framework (EF)
ADO.NET Entity Framework 是微軟以 ADO.NET 為基礎所發展出來的對象關系對應 (O/R Mapping) 解決方案。該框架曾經為.NET Framework的一部分,但version 6之后從.NET Framework分離出來。
8. NHibernate
NHibernate是一個面向.NET環境的對象/關系數據庫映射工具。對象/關系數據庫映射(object/relational mapping,ORM)這個術語表示一種技術,用來把對象模型表示的對象映射到基于SQL的關系模型數據結構中去。
- 特點:
- 開源、免費
- 批量寫入
- 批量讀/多重查詢特性(我理解是在說Future?)
- 批量的集合加載
- 帶有lazy=”extra”的集合
- 集合過濾器和分頁集合
- 二級緩存(實際上NH的二級緩存貌似也很簡單?)
- 集成和擴展性
- 代碼自動生成,減少代碼和sql的開發量,使開發人員擺脫開sql,ado.net和事務,緩存等底層
9. Massive
Massive:小巧,動態的微ORM框架。
6、ORM框架與MyBatis的區別
ORM框架與MyBatis不同,ORM框架將數據庫表一行對應一個類實例,對類的操作會影響到數據庫。MyBatis是將查詢語句得到的ResultSet映射成類,在使用數據庫時需要寫SQL語句,對類的修改也不會影響到數據庫。
7、持久化是什么?
在ORM概念中提到了一個知識點:對象自動持久化到關系數據庫中,那我們就來消化一下持久化
狹義的理解:持久化 僅僅指把域對象永久保存到數據庫中;廣義的理解:持久化 包括和數據庫相關的各種操作(如CRUD)。
總結:持久化就是把數據同步保存到數據庫或某些存儲設備中。
8、為什么要持久化?
通過持久化技術可以減少訪問數據庫數據次數,增加應用程序執行速度;
代碼重用性高,能夠完成大部分數據庫操作;
松散耦合,使持久化不依賴于底層數據庫和上層業務邏輯實現,更換數據庫時只需修改配置文件而不用修改代碼。
說明:本文限于篇幅,故而只展示部分ORM內容!完整的ORM內容小編已經打包好了,有需要的私信小編 (需要)即可免費領取,還有JAVA 課件,源碼,安裝包大廠面試學習等等等
總結
以上是生活随笔為你收集整理的进阶面试的必看的ORM架构之 ORM简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3085 吃遍赴丝码(分治)
- 下一篇: Three.js(十四)—— 模型文件加