四种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最慢。