进阶面试的必看的ORM架构之 ORM简介
1、什么是ORM
ORM,即Object-Relational Mapping(對象關(guān)系映射),它的作用是在關(guān)系型數(shù)據(jù)庫和業(yè)務(wù)實體對象之間作一個映射,這樣,我們在具體的操作業(yè)務(wù)對象的時候,就不需要再去和復(fù)雜的SQL語句打交道,只需簡單的操作對象的屬性和方法。
2、為什么會出現(xiàn)ORM思想
先從項目中數(shù)據(jù)流存儲形式這個角度說起.簡單拿MVC這種分層模式.來說. Model作為數(shù)據(jù)承載實體. 在用戶界面層和業(yè)務(wù)邏輯層之間數(shù)據(jù)實現(xiàn)面向?qū)ο驩O形式傳遞. 當我們需要通過Control層分發(fā)請求把數(shù)據(jù)持久化時我們會發(fā)現(xiàn). 內(nèi)存中的面向?qū)ο蟮腛O如何持久化成關(guān)系型數(shù)據(jù)中存儲一條實際數(shù)據(jù)記錄呢?
面向?qū)ο笫菑能浖こ袒驹瓌t(如耦合、聚合、封裝)的基礎(chǔ)上發(fā)展起來的,而關(guān)系數(shù)據(jù)庫則是從數(shù)學(xué)理論發(fā)展而來的. 兩者之間是不匹配的.而ORM作為項目中間件形式實現(xiàn)數(shù)據(jù)在不同場景下數(shù)據(jù)關(guān)系映射. 對象關(guān)系映射(Object Relational Mapping,簡稱ORM)是一種為了解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫存在的互不匹配的現(xiàn)象的技術(shù).ORM就是這樣而來的.
需要更多的學(xué)習(xí)資料私信小編(需要)即可免費領(lǐng)取
3、優(yōu)缺點
優(yōu)勢
第一:隱藏了數(shù)據(jù)訪問細節(jié),“封閉”的通用數(shù)據(jù)庫交互,ORM的核心。他使得我們的通用數(shù)據(jù)庫交互變得簡單易行,并且完全不用考慮該死的SQL語句。快速開發(fā),由此而來。
第二:ORM使我們構(gòu)造固化數(shù)據(jù)結(jié)構(gòu)變得簡單易行。在ORM年表的史前時代,我們需要將我們的對象模型轉(zhuǎn)化為一條一條的SQL語句,通過直連或是DB helper在關(guān)系數(shù)據(jù)庫構(gòu)造我們的數(shù)據(jù)庫體系。而現(xiàn)在,基本上所有的ORM框架都提供了通過對象模型構(gòu)造關(guān)系數(shù)據(jù)庫結(jié)構(gòu)的功能。這,相當不錯。
缺點
第一:無可避免的,自動化意味著映射和關(guān)聯(lián)管理,代價是犧牲性能(早期,這是所有不喜歡ORM人的共同點)。現(xiàn)在的各種ORM框架都在嘗試使用各種方法來減輕這塊(LazyLoad,Cache),效果還是很顯著的。
第二:面向?qū)ο蟮牟樵冋Z言(X-QL)作為一種數(shù)據(jù)庫與對象之間的過渡,雖然隱藏了數(shù)據(jù)層面的業(yè)務(wù)抽象,但并不能完全的屏蔽掉數(shù)據(jù)庫層的設(shè)計,并且無疑將增加學(xué)習(xí)成本.
第三:對于復(fù)雜查詢,ORM仍然力不從心。雖然可以實現(xiàn),但是不值的。視圖可以解決大部分calculated column,case ,group,having,order by, exists,但是查詢條件(a and b and not c and (d or d))。
世上沒有驢是不吃草的(又想好又想巧,買個老驢不吃草),任何優(yōu)勢的背后都隱藏著缺點,這是不可避免的。問題在于,我們是否能容忍缺點。
4、常用的ORM框架
(1)Hibernate全自動需要些hql語句
(2)iBATIS半自動自己寫sql語句,可操作性強,小巧
(3)EclipseLink 一個可擴展的支持JPA的ORM框架,供強大的緩存功能,緩存支持集群。
(4)Apache OJB等等
5、目前代碼中的ORM都有哪些
1 .C#中的ORM框架
- SqlSugar (國內(nèi))
- Dos.ORM (國內(nèi))
- Chloe (國內(nèi))
- StackExchange/Dapper (國外)
- Entity Framework (EF) (國外)
- NHibernate (國外)
- ServiceStack/ServiceStack.OrmLite (國外)
- linq2db (國外)
- Massive (國外)
- PetaPoco (國外)
2. SqlSugar
SqlSugar是國人開發(fā)者開發(fā)的一款基于.NET的ORM框架,是可以運行在.NET 4.+ & .NET CORE的高性能、輕量級 ORM框架,眾多.NET框架中最容易使用的數(shù)據(jù)庫訪問技術(shù)。
- 特點:
- 開源、免費
- 國內(nèi)開發(fā)者開發(fā)、維護;
- 支持.NET Core;
- 支持主流數(shù)據(jù)庫,如:SQL Server,MySql,Oracle,Sqlite等;
- 維護更新及時
3. PetaPoco
PetaPoco:輕量的POCO對象和數(shù)據(jù)庫映射的ORM框架。
- 特點:
- 開源、免費
4. linq2db
linq2db也是一款快速、輕量、類型安全的POCO對象和數(shù)據(jù)庫映射的ORM框架。從構(gòu)架上來說,linq2db是對比如:Dapper、PetaPoco這個的微ORM的進一步封裝,但它不像Entity Framework那樣笨重。它沒有實現(xiàn)狀態(tài)跟蹤,需要自己處理實體的狀態(tài)更改等。
5. Dos.ORM
Dos.ORM(原Hxj.Data)于2009年發(fā)布,2015年正式開源。在開發(fā)過程中參考了NBear與MySoft,吸取了他們的一些精華,加入新思想,同時參考EF的Lambda語法進行大量擴展。該組件已在數(shù)百個成熟項目中應(yīng)用。官方網(wǎng)站:
http://ITdos.com/Dos/ORM/Index.html
- 特點:
- 開源、免費
- 上手簡單,0學(xué)習(xí)成本。使用方便,按照sql書寫習(xí)慣編寫C#.NET代碼。功能強大
- 高性能,接近手寫Sql
- 體積小(不到150kb,僅一個dll)
- 完美支持Sql Server(2000至最新版),MySql,Oracle,Access,Sqlite等數(shù)據(jù)庫
- 支持大量Lambda表達式寫法,國產(chǎn)ORM支持度最高,開源中國ORM排行前三
- 不需要像NHibernate的XML配置,不需要像EF的各種數(shù)據(jù)庫連接驅(qū)動
- 遵循MIT開源協(xié)議,除不允許改名,其它隨意定制修改
6. ServiceStack.OrmLite
ServiceStack.OrmLite的目標是提供一種方便,無干擾,無配置的RDBMS無關(guān)類型的封裝,與SQL保持高度的契合,展現(xiàn)直觀的API,可以生成可預(yù)測的SQL。
ServiceStack.OrmLite的宗旨:Fast, Simple, Typed ORM for .NET
- 特點:
- 開源、收費(免費版只支持單個庫10張表)
7. Entity Framework (EF)
ADO.NET Entity Framework 是微軟以 ADO.NET 為基礎(chǔ)所發(fā)展出來的對象關(guān)系對應(yīng) (O/R Mapping) 解決方案。該框架曾經(jīng)為.NET Framework的一部分,但version 6之后從.NET Framework分離出來。
8. NHibernate
NHibernate是一個面向.NET環(huán)境的對象/關(guān)系數(shù)據(jù)庫映射工具。對象/關(guān)系數(shù)據(jù)庫映射(object/relational mapping,ORM)這個術(shù)語表示一種技術(shù),用來把對象模型表示的對象映射到基于SQL的關(guān)系模型數(shù)據(jù)結(jié)構(gòu)中去。
- 特點:
- 開源、免費
- 批量寫入
- 批量讀/多重查詢特性(我理解是在說Future?)
- 批量的集合加載
- 帶有l(wèi)azy=”extra”的集合
- 集合過濾器和分頁集合
- 二級緩存(實際上NH的二級緩存貌似也很簡單?)
- 集成和擴展性
- 代碼自動生成,減少代碼和sql的開發(fā)量,使開發(fā)人員擺脫開sql,ado.net和事務(wù),緩存等底層
9. Massive
Massive:小巧,動態(tài)的微ORM框架。
6、ORM框架與MyBatis的區(qū)別
ORM框架與MyBatis不同,ORM框架將數(shù)據(jù)庫表一行對應(yīng)一個類實例,對類的操作會影響到數(shù)據(jù)庫。MyBatis是將查詢語句得到的ResultSet映射成類,在使用數(shù)據(jù)庫時需要寫SQL語句,對類的修改也不會影響到數(shù)據(jù)庫。
7、持久化是什么?
在ORM概念中提到了一個知識點:對象自動持久化到關(guān)系數(shù)據(jù)庫中,那我們就來消化一下持久化
狹義的理解:持久化 僅僅指把域?qū)ο笥谰帽4娴綌?shù)據(jù)庫中;廣義的理解:持久化 包括和數(shù)據(jù)庫相關(guān)的各種操作(如CRUD)。
總結(jié):持久化就是把數(shù)據(jù)同步保存到數(shù)據(jù)庫或某些存儲設(shè)備中。
8、為什么要持久化?
通過持久化技術(shù)可以減少訪問數(shù)據(jù)庫數(shù)據(jù)次數(shù),增加應(yīng)用程序執(zhí)行速度;
代碼重用性高,能夠完成大部分數(shù)據(jù)庫操作;
松散耦合,使持久化不依賴于底層數(shù)據(jù)庫和上層業(yè)務(wù)邏輯實現(xiàn),更換數(shù)據(jù)庫時只需修改配置文件而不用修改代碼。
說明:本文限于篇幅,故而只展示部分ORM內(nèi)容!完整的ORM內(nèi)容小編已經(jīng)打包好了,有需要的私信小編 (需要)即可免費領(lǐng)取,還有JAVA 課件,源碼,安裝包大廠面試學(xué)習(xí)等等等
總結(jié)
以上是生活随笔為你收集整理的进阶面试的必看的ORM架构之 ORM简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3085 吃遍赴丝码(分治)
- 下一篇: Three.js(十四)—— 模型文件加