orm开发和纯sql开发对比
什么是ORM?
ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。
orm优点
首先,ORM最大的优势。不需要考虑sql
隐藏了数据访问细节,“封闭”的通用数据库交互,ORM的核心。他使得我们的通用数据库交互变得简单易行,并且完全不用考虑该死的SQL语句。快速开发,由此而来。
第二:ORM使我们构造固化数据结构变得简单易行。
在ORM年表的史前时代,我们需要将我们的对象模型转化为一条一条的SQL语句,通过直连或是DB helper在关系数据库构造我们的数据库体系。而现在,基本上所有的ORM框架都提供了通过对象模型构造关系数据库结构的功能。这,相当不错。
orm缺点:
第一:性能
无可避免的,自动化意味着映射和关联管理,代价是牺牲性能(早期,这是所有不喜欢ORM人的共同点)。现在的各种ORM框架都在尝试使用各种方法来减轻这块(LazyLoad,Cache),效果还是很显著的。
第二:增加学习成本.
面向对象的查询语言(X-QL)作为一种数据库与对象之间的过渡,虽然隐藏了数据层面的业务抽象,但并不能完全的屏蔽掉数据库层的设计,并且无疑将增加学习成本.
第三:复查sql难以控制
对于复杂查询,ORM仍然力不从心。虽然可以实现,但是不值的。视图可以解决大部分calculated column,case ,group,having,order by, exists,但是查询条件(a and b and not c and (d or d))。。。。。。
世上没有驴是不吃草的(又想好又想巧,买个老驴不吃草),任何优势的背后都隐藏着缺点,这是不可避免的。
网友看法
纯sql更简洁
就我个人而言,我还是比较喜欢直接用 SQL 来进行查询, 我总觉得 ORM 还得熟悉它的各种查询条件,但是 ORM 对于后期切换数据库来说很方便,但是又有多少项目会切换数据库呢?
ORM 对于一些比较复杂的 sql 语句就更加难以控制.
但是如果你只是做一个很小的系统,请求量没有那么大的时候,我觉得使用 ORM 或者 SQL 应该都可以.
纯sql更灵活
使用SQL会更加灵活,限制条件不多,可以降低数据库范式等级来满足复杂多变的业务场景需求;但是ORM方式就必须严格遵守数据库强制外键的范式等级,理论上范式等级越高数据库使用越合理,实际情况并不是这样,范式的使用是需要特定业务场景的限制。
引入更多的使用条件限制和N+1的难题。以前有过项目尝试ORM强制外键关系,最后都是惨痛教训收场。当然ORM这种方案还是有一定优点,对象化操作多表数据,自动联动表关系处理,但是也带来了更多坏处,属于得不偿失的情况。
结论,建议放弃ORM的多表方案,降低数据库范式等级,不要使用强制外键,自己手动维护数据库表关系。但是必须在有清晰的数据库模型管理制度前提上。
我现在建表,不使用表之间的关联,什么外键约束,都不用,
对于我开发的一些应用程序,我一直在编写纯 SQL,主要用于 MySQL。 尽管我在 python 中使用过 ORM,例如 SQLAlchemy,但我并没有坚持使用它们太久。 通常是文档或复杂性(从我的角度来看)阻碍了我。我喜欢简洁
我是这样看的:使用 ORM 实现可移植性,如果它只是要使用一种类型的数据库,则使用纯 SQL。
纯sql门槛低
orm 写 sql 要学不少东西, 不如直接 sql 门槛低一点
但是纯sql会有注入的风险
sql 注入了解一下,用框架不一定是为了省事
不用 orm 但至少用 query builder 类的框架 至少不用担心 sql 注入之类的问题
有些语句复杂的 大部分 query builder 也支持用 raw sql
我个人比较喜欢纯 sql,因为比较好调试,好优化,适应性强,
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
2020-02-22 1-算法与数据结构对程序员的重要性:是一种编程思维,是内功
2020-02-22 pycharm debug的操作
2020-02-22 如何阅读别人的代码
2020-02-22 如何快速提高编程能力