什么是 ORM
ORM(对象关系映射)是一种将对象编程语言中的对象与关系数据库中的数据表进行映射的技术。ORM工具通过提供一种高层抽象,使开发人员能够使用面向对象的方式操作数据库,从而避免了直接编写SQL语句。
ORM 的使用
为了照顾纯前端的同学,我将先展示一个简单的 demo 来演示 ORM 的使用。我们假定有三张表,用户表、文章表和评论表,它们之间的关系可以用图表现出来。每篇文章只能有一个作者,每个文章可以有多条评论,每一条评论只能属于某一篇文章。接下来我们来看看 ORM 在使用时,如何表达数据库中的关系,并使用它进行业务查询和展示。
首先,我们会使用 ORM 来描述三个实体,包括用户、文章和评论。我们将使用 user 类来对应用户实体,使用 comment 类对应评论实体,使用 article 类对应文章实体。在 article 类中,我们将描述刚刚提到的两个关系,即每篇文章有一个作者,每篇文章有多条评论。我们将根据本地数据库的设置,连接到数据库,进行初始化操作。在初始化函数中,我们会首先连接到数据库,然后对这三张表进行数据清理。接下来,我们将演示如何使用 ORM 进行增删改查操作。
我们将先创建一个用户,并使用 ORM 功能查询出该用户,然后对其进行简单修改,并重新查询结果。接着,我们将创建一个文章,并添加两个评论。然后,我们将使用三种不同的方式来查询文章以及与之相关的作者和评论。在执行结果中,我们可以看到每个操作所对应的SQL语句和调用,以及查询到的结果。在下面的三个不同的API调用方式中,生成的 SQL 语句都是相似的。最终,我们将得到一篇文章及其相关的作者、评论以及其他信息。通过这个 demo,我们可以看到如何在 Node.js 中使用 ORM 进行增删改查操作。
优缺点
使用 ORM 有很多优点,例如 ORM 会对查询和更新操作进行数据预处理,从而防止 SQL 注入的风险。另外,ORM 屏蔽了直接编写 SQL 的细节,使得开发人员不必自己写 SQL,这对于 SQL 不熟练的人来说是一个好处。此外,由于ORM以模型为基础,因此支持 MVC 的开发架构,并且可以映射所有数据库表到内存的 model 中,这有助于组织和复用代码,避免了到处写SQL的尴尬处境。
然而,使用 ORM 也存在一些缺点。例如,由于 ORM 定制以及组合 API 生成的 SQL 的特性,有时自动生成的 SQL 可能不是最优的方案,这可能会导致性能问题。此外,为了处理各种复杂的逻辑,model 也会变得很复杂,处理查询结果可能会有不必要的对象深拷贝,这会影响应用的性能。同时,ORM 为了适配 SQL 满足的各种业务场景,有很多 API 需要学习,这也是一种成本。另外,对于一些奇怪的查询需求,ORM 可能无法满足,此时只能手写 SQL。
上面这些是我总结 ORM 的一些优点和缺点。如果觉得说的有点复杂了, 再看看gpt给出的回答,
1 | # 使用ORM的优缺点总结 |