再也不用写SQL!使用 Sequelize 框架在Node.js中快速实现增删改查!

前言

虽然借助 mysql 插件,我们也能在 node.js 环境中操作数据库。比如:

css 复制代码
const [result] = await pool.query(
  'UPDATE users SET name = ?, age = ? WHERE id = ?',
  [name, age, id]
);

但是对于一些前端小白而言,他们比较头疼的是 SQL 语句。

那有没有一种插件,它对 mysql 插件进行了二次封装,小白不用写 sql,直接调用相关方法就可以进行增删改查呢?例如:

css 复制代码
// 查询
const result = await User.findAll();
// 新增
const result = await User.create(userInfo)

有的,ORM 框架登场。

ORM 意思是对象关系映射。其实就是将 JS 文件中定义的对象 和数据库中的进行映射,对象的属性和数据库表的属性一一对应。

我们操作对象,就像操作数据库表一样。

在 node.js 社区中,比较热门的 ORM 框架有 TypeORM、Sequelize、Prisma 等。

本篇文章主要介绍 Sequelize 的使用方法。后续讲完 TypeScript 之后再介绍 TypeORM 框架的使用方法。

1. MySQL 插件进化史

最开始我们用的是 mysql 插件。

后来 mysql2 插件对 mysql 插件进行了封装,性能更强,而且内置 Promise ,支持处理流式数据等。

mysql 插件后来基本停止维护,mysql2 还在维护中。所以我们目前使用的 mysql 插件都是 mysql2:

css 复制代码
npm install mysql2

2. sequelize 插件介绍

Sequelize 是一种 ORM 框架,ORM(Object Relational Mapping)即对象关系映射。

ORM 技术是在对象和数据库之间提供了一座桥梁,我们在操作数据库的时候就不需要再去和复杂的 SQL 语句打交道,只需简单的操作实体对象的属性和方法,就可以达到操作数据库的效果。

安装 sequelize

css 复制代码
npm install Sequelize

3. sequelize 核心代码

3.1 创建 Sequelize 实例

启动项目,测试数据库连接:

3.2 定义模型

这里以 User 模型为例

新建 models 文件夹,新建 user.js 模型文件

讲解:

  • sequelize.define()方法第一个参数是 id,具有唯一性。
  • tableName 对应的是数据库中的表名字,例如 sys_user
  • User.sync()方法表示模型同步。啥意思呢?就是如果你没在数据库创建 sys_user 表,node 项目启动之后会自动在数据库中给你创建这样一个表。
  • User.sync({ force: true }) 表示强制删除原来创建的表,系统根据你定义的 user.js 模型重新给你建个表。
  • 一般我们都是先在数据库中创建好表,不用这个sync() 方法。

3.3 增删改查操作

3.3.1 查询所有用户

User.findAll()

css 复制代码
// 获取所有用户信息
router.get('/list', async (req, res) => {
  try {
    // 相当于 select * from user
    const result = await User.findAll();
    res.json(result);
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
});

3.3.2 新增用户

User.create()

css 复制代码
// 创建新用户
router.post('/save', async (req, res) => {
  const { name } = req.body;
  if (!name) {
    return res.status(500).json({ error: '姓名不能为空' });
  }
  try {
    // 相当于 INSERT INTO users (name, age) VALUES (?, ?)
    const result = await User.create(req.body)
    res.status(200).json(result.dataValues);
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
});

3.3.3 更新用户

User.update()

css 复制代码
// 更新用户
router.post('/update', async (req, res) => {
  const userInfo = req.body;
  try {
    // 相当于 UPDATE users SET name = ?, age = ? WHERE id = ?
    const result = await User.update(userInfo, {
      where: {
        id: userInfo.id
      }
    });
    res.status(200).json({ count: result });
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
});

3.3.4 删除用户

User.destroy()

css 复制代码
// 删除用户
router.post('/delete', async (req, res) => {
  const { id } = req.body;
  try {
    // 相当于 DELETE FROM users WHERE id = ?
    const result = await User.destroy({
      where: {
        id: id
      }
    });
    res.status(200).json({ count: result });
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
});

4.测试

4.1 查询

4.2 新增

4.3 更新

更新结果会返回成功的个数:

4.4 删除

删除结果会返回成功的个数:

5.完整代码

css 复制代码
链接: https://pan.baidu.com/s/1RTbgaCmt6vRSqn7ACvrzPg?pwd=6666 
提取码: 6666 

拿到代码之后记得:

  • npm install 安装依赖
  • 修改 Sequelize.js 里面连接 MySQL 数据库的账号密码等配置项
  • npm app.js 启动后端项目
相关推荐
小陈工1 分钟前
2026年3月28日技术资讯洞察:5G-A边缘计算落地、低延迟AI推理革命与工业智造新范式
开发语言·人工智能·后端·python·5g·安全·边缘计算
azhou的代码园1 小时前
基于SpringBoot+微信小程序的图片识别科普系统
spring boot·后端·微信小程序
Tony Bai1 小时前
Rust 看了流泪,AI 看了沉默:扒开 Go 泛型最让你抓狂的“残疾”类型推断
开发语言·人工智能·后端·golang·rust
四千岁1 小时前
2026 最新版:WSL + Ubuntu 全栈开发环境,一篇搞定!
javascript·node.js
用户3167361303421 小时前
javaLangchain4j从官方文档入手,看他做了什么——具体使用(二)
后端
無名路人1 小时前
Zsh 脚本 + VS Code 任务:NestJS + Vue3 一键部署到 1Panel
运维·后端·自动化运维
ybwycx2 小时前
springboot之集成Elasticsearch
spring boot·后端·elasticsearch
程途知微3 小时前
AQS 同步器——Java 并发框架的核心底座全解析
java·后端
iPadiPhone3 小时前
分布式架构的“润滑剂”:RabbitMQ 核心原理与大厂面试避坑指南
分布式·后端·面试·架构·rabbitmq
武子康3 小时前
大数据-255 离线数仓 - Apache Atlas 数据血缘与元数据管理实战指南
大数据·后端·apache hive