Node.js的Sequelize ORM简介
对于大多数开发者来说,将对象关系映射器(ORM)连接到Node.js应用程序并不是一件容易的事情,因为没有详细的资源和/或相关文档。
在我们直接进入Node.js的ORM之前,我们可以从什么是sequelization ,然后是ORM ,以及将ORM与Node.js连接起来有什么用。
Sequelization ORM是指将Node.js应用程序连接到对象关系映射器以实现更好的数据库同步的过程。
ORM是一个简单的对象关系映射器,通过使用数据库中的对象来帮助数据操作和查询。使用ORM ,可以优化SQL查询,使其易于重复使用和维护。
| 目录 |
|---|
| [先决条件] |
| [SQL数据库基础知识] |
| [对象关系映射器] |
| [序列化] |
| [Sequelize的好处] |
| [总结] |
前提条件
要跟上这篇文章,读者应该对JavaScript和MySQL有一个很好的理解。
我们首先设置了一个新的npm包,如下图所示。
npm init -y
然后我们安装Sequelize,如下图所示。
npm install sequelize --save
它可以通过npm 和yarn 。--save ,使我们的package.json 文件中的依赖关系可用。然后你要安装你喜欢的数据库的驱动程序,例如。
npm install pg pg-hstore --save
npm install mysql2 --save
npm install mariadb --save
npm install sqlite3 --save
npm install tedious --save
SQL数据库基础知识
在我们进入Sequelize之前,让我们刷一下关于SQL的知识。
结构化查询语言(SQL)是一种允许我们在执行数据库查询时与数据库互动的语言。
发音从SQL 到sequel ,你可以选择不同的发音。SQL只允许在关系型数据库上执行。
SQL使我们能够执行缩写为CRUD ;创建读取更新和删除的操作。
为了说明这一点,我们的数据库中有两个表Employees 。
表lego_people 。
| 名称 | 年龄 |
|---|---|
| james | 34 |
| 克雷格 | 15 |
| PAUL | 67 |
| 倩倩 | 55 |
表lego_height:
| 名称 | 厘米 |
|---|---|
| james | 4 |
| 薛明 | 5 |
| Paul | 7 |
| 倩倩 | 5 |
因此,我们将使用INSERT 查询在lego_people 表中插入样本数据,如下图所示。
INSERT INTO lego_people(name, age)
VALUES ('Joe' ,12);
INSERT INTO 语句是用来在数据库表中创建数据的。我们传入name 和age 作为参数,指定我们要添加的属性。
为了从lego_people 表中读取数值,我们使用SELECT 查询,如下图所示。
SELECT name FROM lego_people;
name 代表lego_people 表中的列名。
lego_height 为了通过使paul 作为8cm 高的update 表中的一条记录,我们使用UPDATE 查询。
UPDATE lego_height
SET name = 'paul', height = 8;
我们还可以从数据库中执行一个delete 操作。例如,让我们使用以下命令完全删除paul 。
DELETE FROM lego_height
WHERE name = 'paul';
WHERE 子句指定了要删除的数据。
例如,如果我们想把年龄和身高的记录都放在一个表中,我们将使用LEFT JOIN 语句来合并这两个表,如下所示。
SELECT name, age FROM lego_people
LEFT JOIN lego_height USING (name);
这将导致这样的结果。
| 名称 | 年龄 | 厘米 |
|---|---|---|
| james | 34 | 4 |
| craig | 15 | 5 |
| 保罗 | 67 | 7 |
| 倩女幽魂 | 55 | 5 |
对象关系映射器(ORM)Node.js方法
在我们开始使用Sequelize之前,让我们了解一下什么是ORM,以及Node.js中支持的一些ORM。
对象关系映射是一种在关系数据库和对象之间转换数据的简化方法。
很多时候,我们遇到的情况是,我们必须写复杂的SQL查询语句来执行数据库的CRUD操作。
更糟糕的是,我们仍然需要将数据库中的数据转换为与我们所选择的语言兼容的对象,我们将在下一章看到这一点。此外,它还简化了在需要时对数据库引擎的操作。
那么ORMs是如何工作的呢?首先,我们从选择你想使用的正确数据库开始。然后,决定能与数据库高效工作的对象关系映射器,并安装它。由于我们使用的是Node.js,我们将考虑Sequelize。
第二,我们创建一个数据库模型。这代表了我们数据库的结构。
数据库模型提供了可扩展性、效率的优势。模型中定义的结构包括表、数据库集合、列。然后我们连接我们的数据库。
支持Node.js的对象关系映射器的类型有。
Sequelize其中对PostgreSQL、MySQL、MariaDB、SQLite和Microsoft SQL Server数据库的支持。Caminte支持大量的数据库,如MySQL Sqlite3, Riak, Postgres, CouchDB, MongoDB, Redis。Node-ORM具有对MySQL、SQLite和PostgreSQL的支持。
什么是Sequelize?
Sequelize是一个开源的Node.js模块,使JavaScript开发人员能够更容易地与关系型数据库一起工作,包括但不限于MySQL、Postgres。
当你在做这样的事情时,有可能你已经在使用关系型数据库了。
// create a database table
CREATE TABLE articles(
id INT AUTO_INCREMENT,
title NVARCHAR(100) NOT NULL,
body NVARCHAR(100) NOT NULL,
submittedAt DATETIME NOT NULL
);
// instantiate mysql
const mysql = require("mysql");
const connection = mysql.createConnection({
host: "localhost",
user: "root",
password: "",
database: "demo_schema"
});
connection.connect();
// query sql statements
const query = "SELECT `id`, `title`, `content`, `submittedAt` \
FROM 'articles' WHERE `articles`.`id` = ?";
connection.query(query, 5, function(error, article){
console.log(article);
});
你正在写一个单独的脚本来创建表,定义它们之间的关联,然后你在你的JavaScript中嵌入SQL查询,使用一个低级别的适配器来对你的数据库执行这些查询。
低级适配器是用于与SQL服务器接口的数据库模块。它们包括pg 、jdbc-postgres ,用于与各种编程语言的接口PostgreSQL 。
JavaScript并不能很好地支持多行字符串。例如,在我们的例子中,我们要用反斜杠来结束字符串的第一行。
即使它真的支持,在JavaScript和SQL之间切换也是很不愉快的。这就造成了大量的垃圾代码和很少的业务逻辑,不容易维护。
另一方面,使用sequelize,你可以完全避免写SQL查询。
让我们来看看这个代码片段。
// instantiate sequelize
const Sequelize = require('sequelize');
// connect db
const connection = new Sequelize("db name", "username", "password");
// define article model
const Article = connection.define("article", {
title: Sequelize.String,
content: Sequelize.String
});
connection.sync();
首先,我们实例化Sequelize并定义我们的数据库连接参数。我们不写一个单独的包含SQL代码的SQL文件来生成表,而是定义所谓的模型。
例如,在我们的案例中,article 是我们的模型,我们定义两个属性:title 和content 。
使用sync() 函数,Sequelize将查看你定义的所有模型,然后生成SQL查询,这些查询将反过来创建相关表。
然后,当我们准备查询数据时,而不是嵌入SQL,我们只是使用Sequelize友好的API。
例如,在下面的片段中,我们没有使用查询,而是简单地写了findById() ,然后指定了文章的ID,在我们的案例中是5 ,提高了它的可读性。
// instantiate sequelize
const Sequelize = require('sequelize');
// connect db
const connection = new Sequelize("db name", "username", "password");
// define article model
const Article = connection.define("article", {
title: Sequelize.String,
content: Sequelize.String
});
connection.sync();
// query using sequelize API
Article.findById(5).then(function (article) {
console.log(article);
})
使用Sequelize可以帮助我们减少工艺,减少模板,最终使我们的代码更容易阅读、维护和扩展。
Sequelize的好处
一般来说,Sequelize和对象关系映射器的好处是。
- Sequelize使我们能够写更少的代码。
- 使我们能够写出更一致的代码。
- 你大多可以避免SQL查询。
- Sequelize抽象了数据库引擎。
- 迁移的良好工具。
总结
一般来说,这主要取决于你所使用的数据库类型,它将影响你为你的Node.js应用程序选择ORM的决定。
在这篇文章中,我们介绍了为什么Sequelize与现有的数据库相比是最好的选择。