谈一谈重 ORM 和 轻 ORM + SQL 的一些经验
ORM 的本质比较简单,就是对象关系映射 Object Relation Mapping
那很多人都经常会说的一个问题,EF 或 EF Core 好啊,方便啊,不用写麻烦的 SQL ,写 SQL 又要提高成本(初级程序员的学习成本)又会降低代码可读性。
我个人总结的经验就是不用纠结太多,看项目,也看侧重点。
用 EF / EF Core 好处:
1. 上手快,开发容易,LINQ & Lambda 写法可读性高
2. 学习成本低(很重要)
缺点也很致命:
1. 不易掌控,很容易写出效率极低的 LINQ 导致拖死 DB。
2. 过度屏蔽细节,真的要用好 EF 需要深入了解其内部架构
3. 依赖官方更新,如果存在 BUG 或优化,没有非常了解的小组,很被动
个人推荐的使用场景:
1. 公司有几个或1个专门的小组对 EF / EF Core 有深入研究,并且可以做二次开发
2. 中小型,内部项目,并且不存在性能要求(高并发,大数据量的数据查询,DB压力很小)也可以用
Dapper + Sql 好处(推荐):
1. 快,稳,可控性高(细节把控) 。
2. 可扩展性强,毕竟就那么点东西,不过需要懂 Emit,不写 Emit 封装可能存在性能问题,毕竟 ORM 需要做大量反射。
3. 有实际项目在用,Stackoverflow 那么大的并发量都能抗住,说明本身是一个优秀的开源项目。
缺点:
1. 首先需要学 SQL ,虽然不是一门语言,但是是一个必要技能,有一部分初学者接触过 EF 后,产生一种不需要写 SQL 的感觉。目前来讲不是很赞同(以后可能会有 AI 分析,我也不确定)
,程序员,就是要有知其然知其所以然的精神,至少自己写的 SQL,自己知道 SQL 执行了哪些东西,分析问题也容易(总不至于连发现几个 SQL 查询非常慢,你一脸大写懵逼,还要去找 DBA 帮忙)。
2. 需要合理的写 SQL,如果写在代码中,会降低代码可读性(如果 SQL 比较长)
3. Dapper 本身只做了 ADO.Net 的封装,所以你需要比写 EF 做更多的事情,比如连接池管理。
个人推荐场景:
1. 对 SQL 性能有一定要求(甚至有些公司有非常严格的要求,查询用时要精确到毫秒),并且经常需要分析 SQL 日志做数据库方面的优化。
2. 团队中对写 SQL 不排斥,毕竟不能强人所难吧,有一些人确实不喜欢写 SQL (虽然我不这么认为)。
3. 数据量很大,并发也不小,但又不是很想在 ORM 这个方面做过多投入。
谈一谈重 ORM 和 轻 ORM + SQL 的一些经验的更多相关文章
- 谈一谈Elasticsearch的集群部署
Elasticsearch天生就支持分布式部署,通过集群部署可以提高系统的可用性.本文重点谈一谈Elasticsearch的集群节点相关问题,搞清楚这些是进行Elasticsearch集群部署和拓 ...
- 谈一谈对MySQL InnoDB的认识及数据库事物处理的隔离级别
介绍: InnoDB引擎是MySQL数据库的一个重要的存储引擎,和其他存储引擎相比,InnoDB引擎的优点是支持兼容ACID的事务(类似于PostgreSQL),以及参数完整性(有外键)等.现在Inn ...
- 蓝的成长记——追逐DBA(5):不谈技术谈业务,恼人的应用系统
***************************************声明*************************************** 个人在oracle路上的成长记录,当中 ...
- 谈一谈Java8的函数式编程(二) --Java8中的流
流与集合 众所周知,日常开发与操作中涉及到集合的操作相当频繁,而java中对于集合的操作又是相当麻烦.这里你可能就有疑问了,我感觉平常开发的时候操作集合时不麻烦呀?那下面我们从一个例子说起. 计 ...
- ORM的概念, ORM到底是什么
一.ORM简介 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术.简单的说,ORM是通过使 ...
- 谈一谈泛型(Generic)
谈一谈泛型 首先,泛型是C#2出现的.这也是C#2一个重要的新特性.泛型的好处之一就是在编译时执行更多的检查. 泛型类型和类型参数 泛型的两种形式:泛型类型( 包括类.接口.委托和结构 没有泛型枚 ...
- 从一张图开始,谈一谈.NET Core和前后端技术的演进之路
从一张图开始,谈一谈.NET Core和前后端技术的演进之路 邹溪源,李文强,来自长沙.NET技术社区 一张图 2019年3月10日,在长沙.NET 技术社区组织的技术沙龙<.NET Core和 ...
- ORM基础之ORM介绍和基础操作
一.ORM介绍 1.ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过 ...
- 谈一谈iOS事件的产生和传递
谈一谈iOS事件的产生和传递 1.事件的产生 发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中. UIApplication会从事件队列中取出最前面的事件,并将事件 ...
随机推荐
- 【POJ1573】Robot Motion
题目传送门 本题知识点:模拟 本题的题意也很简单. 给出一个矩阵,矩阵里面有着东南西北(上下左右)的指示,当机器人走到上面时则会按照指示前进.机器人每次都从最上面一行的某一列进入. 需要判断的是机器人 ...
- [HAOI2018]染色(NTT)
前置芝士 可重集排列 NTT 前置定义 \[\begin{aligned}\\ f_i=C_m^i\cdot \frac{n!}{(S!)^i(n-iS)!}\cdot (m-i)^{n-iS}\\ ...
- QML学习(四)——<Text显示>
文本显示是界面开发必不可少的内容,在Qt Quick模块中提供了 Text 项目来进行文本的显示,其中可以使用 font 属性组对文本字体进行设置.这一篇我们来看看它们的具体使用. 使用字体 就像前面 ...
- @Conditional 和 @ConditionalOnProperty
@ConditionalOnProperty https://blog.csdn.net/dalangzhonghangxing/article/details/78420057 @Condition ...
- 太厉害了,终于有人能把TCP/IP协议讲的明明白白了!
从字面意义上讲,有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议.实际生活当中有时也确实就是指这两种协议.然而在很多情况下,它只是利用 IP 进行通信时所必须用到的协议群的统称.具体来说 ...
- enq: DX – contention等待事件解决方法
前几日,一测试环境在dblink单表同步的时候(不管怎么说,目前仍然是同构数据库同步性能最快的方法,别听网上的扯淡,无论goldengate还是java层,都是比较慢的),某张表一直同步不过去,看了一 ...
- 自定义Spring Boot内置tomcat的404页面
spring boot 的相关404页面配置都是针对项目路径下的(如果配置了 context-path) 在context-path不为空的情况下,如果访问路径不带context-path,这时候会显 ...
- jq select change下拉框选项变化判断选中值,添加(attr)或移除(removeAttr)一个或多个属性
select change下拉框选项变化判断选中值,添加(attr)或移除(removeAttr)一个或多个属性 $("#IsRecommend").change(function ...
- primer express 注册
xp的
- 通过sed -i ,通过准备好的sh脚本,来设置linux iptable白名单
通过准备好的sh脚本,来设置linux iptable白名单 特定字符串的行前插入新行 sed -i '/特定字符串/i 新行字符串' file #!/bin/bash del_stdin_buf() ...