什么是ORM?
简单来说,ORM系统是一种技术,你使用面向对象的范式来创建应用程序和数据库之间的映射,直接进行数据操作和查询。
当涉及到在连接和关系上的检索和插入时,它将遵循同样的范式来操作或查询与操作有关的数据。
例如,一个简单的内部连接查询将这样查询数据:
SELECT Orders.OrderID, Customers.CustomerName
这个内联查询将返回一个以行为单位的数据列表,但你可能想将其汇总成一些更可读的格式。
让我们开始吧
我已经创建了一个小的模板,以使事情早点开始。我还假设你对Node.js有一定的了解,并且在开始之前知道如何连接到数据库。但无论你的技术水平如何,你都可以在这里找到源代码。
用我们的源代码,在终端运行以下命令:
1. docker-compose build
现在如果你去路由localhost:5000/,你会看到一个空的对象提示起来。这里有一个名为migrations的文件夹,我使用db-migrate包在其中添加了3个表,即用户、项目和与线性时尚相关的页面,分别在其迁移中。
该应用是用 术语 所以你可以 阅读 关于这一点,如果你以前没有使用过它。
模式
我们的数据库目前的模式是:
- 用户表
- 项目表(1-m与用户)。
- 页面表(1-m与项目)。
我们的方法是创建一个将被继承到所有模型文件中的类,其方法将在所有模型中共享,如获取或保存。
让我们创建一个名为/models/index.js的文件夹和文件,并在其中创建一个名为DatabaseOperations的类。
models/index.js
在这里,我们用一个简单的构造方法导出该类,以获得通用名称。
让我们创建模式文件并把一些内容放在那里,就像下面的图片。
models/page.js
models/project.js
models/user.js
这些都是简单的类,只是把数据库操作类作为一个父类。
现在,让我们在DatabaseOperation里面创建一个方法来获取记录
但是等等,即使我们使用类,我们也需要一些东西来建立我们的查询,所以首先创建一个查询生成器来生成查询。
查询生成器
在这里,我们使用两个方法来获取过滤器和保存记录。这只是建立查询。这不会建立本地查询,而是建立包的查询来制定包的优势。
现在让我们看看如何为DatabaseOperation创建GET和POST方法。
让我们使用它们,更新路线以利用这些方法来存储和获取记录
保存和获取用户
保存和获取项目
管理关系
我们也可以管理关系以保持数据获取的顺序。为了管理,我们也需要做一些其他的项目,比如说:
- 在查询生成器中添加一个新方法
- 在DatabaseOperation类中添加一个新的方法来包括记录
- 添加一个单独的条目来获取关系
请看关系项目的链接中是如何做的,我将在改天更新文章,用以下更强大的方法来管理它。
- github.com/Piyush-Use-…
- github.com/Piyush-Use-…
- github.com/Piyush-Use-…( 用于多对多 )
- github.com/Piyush-Use-…(用于一对多的关系)
- 下面是一个关系的例子,其中包括
const data = await User.include([User.PROJECT], {
where: {
user_id: userId
}
})
总结
现在我们已经创建了我们的自定义ORM,可以在同一时间对多个表进行获取、保存和其他操作。
我已经更新了repo中的其他方法,其中包括:
- 更新
- 删除
- 包括(关系)
你可以在repo上的分支ORM中找到源代码。