四種orm框架的對
1、什么是ORM?
答:ORM(Object-relational mapping)即對象關系映射,是一種為了解決面向對象與關系數據庫存在的互不匹配的現象的技術。也就是說,ORM是通過使用描述對象和數據庫之間映射的元數據(映射文件信息),將程序中的對象自動持久化到關系數據庫中。說白了就是將相應的實體映射到相應的數據庫表,然后使用orm框架封裝好的api進行數據庫訪問,減少了自己寫數據庫訪問類的步驟。
2、ORM框架的優缺點是?
答:ORM框架的優點:(1)操作簡單,提高開發效率。(2)支持面向對象封裝。(3)可移植。(4)減少重復性代碼
ORM框架的缺點:(1)處理多表聯查之類的查詢時,ORM的語法會變得很復雜。(2)執行性能較低(但現在有一些輕型ORM框架,性能接近原生SQL)。
2、四種框架的基本信息對比如下表:
框架/對比屬性 SqlSugar Dos.ORM Freesql EFCodeFirst
支持數據庫類型 MySql、SqlServer、Sqlite、Oracle 、 postgresql MySql、SqlServer、Sqlite、Oracle 等數據庫 MySql、SqlServer、Sqlite、Oracle 、 postgresql MySql、SqlServer、Sqlite、Oracle 、 postgresql
支持的平台版本 .net和net core .net和net core .net和net core .net和net core
團隊規模 公司性質 公司性質 個人 微軟
體積 895k(下載后package的大小) 607k(下載后package的大小) 558k(下載后package的大小) 17.8M
文檔幫助 較全(install后,就可以直接使用了) 一般(但是很多細節的東西並沒有告知用戶,例如需要通過代碼生成器生成的實體類才能與數據庫進行映射) 較全(install后,創建數據庫即可直接使用) 較全(無論是微軟官方還是百度谷歌,用的人比較多,遇到問題容易)
與數據庫交互方式 支持dbfirst、codefirst 支持dbfirst 支持dbfirst、codefirst 支持code first(當前使用的是code first,也可支持dbfirst)
學習成本 低 一般 低 較高(剛開始使用會遇到許多的bug,雖然網上都有解決方法,但是學習起來沒前幾種容易)
3、四種框架的耗時情況如下:
如下表格,展示的是四種ORM框架Crud的性能,其中,(1)增查刪改都是循環5次,每次增刪改1萬條數據,查詢是每次查詢10萬條數據,取5次的平均值;(2)批量增刪改都是循環5次,每次增刪改10萬條數據,取5次平均值:
類別/框架名稱 Freesql(單位:秒) DOS.ORM(單位:秒) EF(Code First)(單位:秒) SqlSugar(單位:秒)
新增(Insert) 13.9063 13.5712 273.563 12.4268
刪除(Delete) 13.6688 13.3366 65.1328 12.4202
修改(Update) 14.3704 14.3306 54.021 12.084
查詢(Select) 1.7502 0.2308 0.5486 0.1416
批量新增(BulkInsert) 1.4382秒 20.6162秒 27.6674秒 1.4286秒
批量修改(BulkUpdate) 3.5988秒(不足以用來參照,看下面注解) 22.6556秒 22.1634秒 3.8188秒
批量刪除(BulkDelete) 0.7504秒(不足以用來參照,看下面注解) 只能批量刪除2009條,超過就報錯 20.336秒 0.7034秒
由上表可知,各種框架CRUD的性能如下(由快到慢):
(1)循環CRUD操作的性能如下:
新增:SqlSugar>DOS.ORM>Freesql>EF
刪除:SqlSugar>DOS.ORM>Freesql>EF
修改:SqlSugar>DOS.ORM>Freesql>EF
查詢:SqlSugar>DOS.ORM>EF>Freesql
綜上可知:SqlSugar框架的CRUD性能是最高的,其中EF除了查詢比較快之外,刪改所花費的時間都是其他三種框架的4~5倍,而新增就是20倍左右!
(2)循環批量CRUD的性能如下:
批量新增:Freesql=SqlSugar>DOS.ORM>EF
批量修改:Freesql=SqlSugar>EF>DOS.ORM
批量刪除:Freesql=SqlSugar>EF
注解1:Freesql是有批量新增的方法BulkInsert,故其批量新增操作與其他框架一樣。但是,Freesql沒有批量修改、刪除的方法,如下代碼片段:
//下面的n表示1~5,是循環執行的次數,在上面的Insert步驟中分配插入了1萬條"Freesql測試的數據1"、"Freesql測試的數據2"、"Freesql測試的數據3"、"Freesql測試的數據4"、"Freesql測試的數據5"
//Freesql只能通過lamdba表達式匹配到的數據進行刪改,而不能直接在update()中添加一個list
context.Update<ORMTest>(a => a.Name == "Freesql測試的數據" + n, a => new ORMTest()
{
Name = "Freesql修改的數據" + n
});
context.Delete<ORMTest>(a => a.Name == "Freesql修改的數據" + n);
注解2:DOS.ORM批量刪除超過2009條數據時就會報錯,如下圖:
綜上,只有SqlSugar涵蓋的方法比較多,而且速度也較快!
4、四種框架都支持哪些功能?
功能/框架 Freesql DOS.ORM EF SqlSugar
增刪查改 支持 支持 支持 支持
批量增刪改 支持 支持 支持 支持
事務、存儲過程、日志 支持 支持 支持 支持
lamdba、執行SQL 支持 支持 支持 支持
linq 不支持 不支持 支持 不支持
多表查詢、分組查詢 支持 支持 支持 支持
全局過濾器 不支持 不支持 支持 支持
答:四種框架都支持:
基本查詢、多表查詢、分組查詢、批量增刪改操作、存儲過程、事務、執行SQL、日志等功能。
5、就個人使用而言,比較推薦哪個框架?
答:個人比較推薦SqlSugar,原因如下:
(1)只要下載了SqlSugar包后,就可以直接按照官網的例子進行編碼,日志跟蹤方面我認為是最簡單已用的,且文檔寫得比較好、可由代碼生成數據庫,可以快速上手。
(2)Freesql與SqlSugar差不多,但是由於我覺得SqlSugar日志跟蹤方面做得比較好且可以由代碼生成數據庫,且Freesql對批量操作的支持不是很好,只能批量新增(且沒有返回值),不能批量刪除、修改,所以我才選擇SqlSugar:
(3)Dos.ORM是這三個框架里面最不好上手,***不能***直接自己創建類文件,而是需要下載官網推薦的***代碼生成器***去生成相應的類,然后才能進行數據庫的訪問,否則插入刪除等操作都會報錯,所以就個人而言,不推薦用這個,認為學習成本比其他兩個高。
(4)EF是重量級ORM框架,上面三種框架有的功能它都有,且有微軟這個大廠在背后支撐,百度谷歌可以輕易搜索到大多數問題的解決方法,一開始,只要修改類結構,容易遇到與"dbo.Migrationary"相關的錯誤(這是需要了解codefirst數據庫遷移方面的知識,可通過這邊文章了解https://blog.csdn.net/xwnxwn/article/details/90171519),如果想用的功能不多,且不想框架太大的話,就還是推薦上面三種。
(5)四種框架中,SqlSugar進行CRUD的性能最高,而EF最慢。