Sequelize:Node.js 中的强大 ORM 框架

❤️砥砺前行,不负余光,永远在路上❤️

目录

    • 前言
      • 优势:提高效率,不用SQL即可完成数据库操作。
    • 那什么是 Sequelize?
    • 主要特性:
      • 1、模型定义和映射:
      • 2、关联和联接:
      • 3、事务管理:
      • 4、查询构建:
      • 5、数据验证:
    • 详细使用示例:
      • 一、创建数据库连接实例
      • 二、定义模型
        • 1、models/index.js文件
      • 三、针对数据库已经建好的表可以使用sequelize-auto 自动生成模型
        • 1、安装sequelize-auto,以及mysql2
        • 2、终端执行指令生成models
      • 四、express中引入使用
      • 五、Sequelize实现增删改查
        • 1、创建数据
        • 2、删除数据
        • 3、修改数据
        • 4、查找数据/分页模糊查询
        • 5、查找所有findAll
        • 6、查找某一条数据findone
        • 7、关联查询后续补充。
      • 六、更多用法

前言

在现代的 Web 开发中,与数据库进行交互是常见的任务。为了简化和加速与数据库的交互过程,许多开发人员选择使用 ORM(对象关系映射)框架。ORM 框架提供了一种将数据库记录映射到对象的方式,使开发人员可以使用面向对象的编程方式来处理数据库操作。在 Node.js 生态系统中,Sequelize 是一个备受青睐的 ORM 框架,本文将介绍 Sequelize 的特性和用法。

优势:提高效率,不用SQL即可完成数据库操作。

那什么是 Sequelize?

Sequelize 是一个基于 Promise 实现的 Node.js ORM 框架,用于与关系型数据库进行交互。它支持多种数据库,包括 PostgreSQL、MySQL、SQLite 和 MSSQL。Sequelize 提供了强大的功能,如模型定义、关联、事务管理、查询构建和数据验证等。

主要特性:

1、模型定义和映射:

Sequelize 允许您通过定义模型来映射数据库表。模型是 JavaScript 类,代表了一个数据库表的结构和行为。通过模型,您可以轻松地进行 CRUD(创建、读取、更新、删除)操作。

2、关联和联接:

Sequelize 提供了丰富的关联功能,使您能够在不同的模型之间建立关系,如一对一、一对多和多对多关系。这使得在查询时可以轻松地跨表进行联接操作,提供了更强大的数据检索和操作能力。

3、事务管理:

Sequelize 支持事务,这是在复杂的数据库操作中至关重要的功能。通过使用事务,您可以确保一系列数据库操作的原子性,要么全部成功,要么全部失败。这对于确保数据的完整性和一致性非常重要。

4、查询构建:

Sequelize 提供了强大而灵活的查询构建功能,使您可以使用链式调用方式构建复杂的查询。您可以使用简单的方法链和条件表达式来过滤、排序、分页和聚合数据,以满足各种查询需求。

5、数据验证:

Sequelize 具有内置的数据验证机制,可以在模型定义中指定字段的验证规则。这样,您可以确保在将数据保存到数据库之前进行有效性检查,并且可以轻松地处理输入数据的验证和清理。

详细使用示例:

下面是一个简单的示例,展示了如何使用 Sequelize 进行数据库操作:

一、创建数据库连接实例

我这里简单的对Sequelize 处理了一下,将配置单独提取到了config文件下

/** @Date: 2023-05-24 09:23:47* @LastEditTime: 2023-05-24 16:09:13*/
//1.导入Sequelize模块
const Sequelize = require('sequelize')
const { dbConfig } = require('../config/index')
const { database, user, password, options } = dbConfig//new Sequelize('数据库名','用户名','密码',{配置信息})
//2.使用sequelize模块配置和数据库的连接信息:创建连接数据库的对象
const mysql_Sequelize = new Sequelize(database, user, password, options)
//3.导出数据库的连接对象
module.exports = mysql_Sequelize;

二、定义模型

一般在项目中会统一管理Models 在项目根目录有一个models文件夹,通过index集中管理,单独的models文件如下图。

1、models/index.js文件

const coon = require('../utils/sequelize')
const { Sequelize } = require("sequelize");const User = require('./user')(coon, Sequelize) //用户表
const Room = require('./room')(coon, Sequelize) //房间表
const Record = require('./record')(coon, Sequelize) //房间记录表
const RoomUser = require('./room_user')(coon, Sequelize)
const Standings = require('./standings')(coon, Sequelize)  //战绩表module.exports = {User, Room, RoomUser, Record, Standings
};

在这里插入图片描述

在这里插入图片描述

三、针对数据库已经建好的表可以使用sequelize-auto 自动生成模型

使用方法如下:

1、安装sequelize-auto,以及mysql2

cnpm install sequelize-auto
cnpm install mysql2//oryarn add sequelize-auto
yarn add mysql2

2、终端执行指令生成models

sequelize-auto -h 127.0.0.1 -d play-record -u root -x  123456
sequelize-auto -h 主机地址 -d 数据库名称 -u 用户名 -x  密码

执行完成命令会在当前目录生成一个models/ 下面的所有 文件就是我们需要的。
在这里插入图片描述

四、express中引入使用

router文件中引入 定义好的models即可。

const { literal, Op, Sequelize } = require("sequelize");
const { User, Room, RoomUser, Record, Standings } = require('../models/index')

在这里插入图片描述

五、Sequelize实现增删改查

1、创建数据

创建数据使用create()

router.post('/insert/article', async (req, response, next) => {const { title, content, userId, inputValue } = req.bodytry {const res = await Article.create({ id: uuid(), title, content, userId, inputValue })response.send(success(res))} catch (error) {response.send(fail(error))}
});

2、删除数据

删除使用destroy()

/* 删除文章 */
router.post('/delete/article', async (req, response, next) => {const { id } = req.bodytry {const data = await Article.destroy({ where: { id } }); //直接删除response.send(success(data))} catch (error) {response.send(fail(error))}
});

3、修改数据

修改使用update

router.post('/update/article', async (req, response, next) => {const { id, title, content, inputValue } = req.bodytry {const data = await Article.update({ title, content, inputValue }, { where: { id } });response.send(success(data))} catch (error) {response.send(fail(error))}
});

4、查找数据/分页模糊查询

/* 分页查询 */
/* 获取文章列表 */
router.post('/article/list', async (req, response, next) => {const { title, pageSize, pageNum } = req.bodytry {let data = await Article.findAndCountAll({where: {title: {[Op.like]: `%${title || ''}%`},},order: [['createTime', 'desc']],limit: pageSize || 10,offset: ((pageNum || 1) - 1) * (pageSize || 10),});response.send(success(data))} catch (error) {response.send(fail(error))}
});

5、查找所有findAll

/* 获取所有文章 */
router.post('/get/article/list/all', async (req, response, next) => {try {const data = await Article.findAll(); //获取所有response.send(success(data))} catch (error) {response.send(fail(error))}
});

6、查找某一条数据findone

/* 获取文章详情 */
router.post('/article/details', async (req, response, next) => {const { id } = req.bodytry {const data = await Article.findOne({where: { id }});response.send(success(data))} catch (error) {response.send(fail(error))}
});

7、关联查询后续补充。

六、更多用法

官网地址:https://www.sequelize.cn/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/253951.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python中提取指定元素——一个简单而精细的方法

Python中提取指定元素——一个简单而精细的方法 在网页抓取中,经常需要提取特定元素,例如标题、段落、图片等,以便于后续的数据处理与分析。而Python则是许多工程师在此领域中的首选语言,其灵活的语法和强大的第三方库给爬虫和数…

chatgpt赋能python:Python中用什么表示空格

Python中用什么表示空格 空格在编程中是一个非常重要的概念,特别是在Python中。Python是一门非常灵活的语言,空格是它语法的一个关键组成部分。今天我们将探讨的是Python中用什么表示空格。 空格是Python中的一个重要概念,它被用来表示代码…

制作嵌入式busybox rootfs系统

1、busybox下载 BusyBox 此篇使用版本BusyBox 1.31.1 (stable) 2、设置交叉编译环境变量 source environment-setup-aarch64-poky-linux或者其他架构的编译链工具 3、busybox编译设置 cd busybox-1.31.1 修改根目录Makefile中的CROSS_COMPILE和ARCH参数 比如ARCH ? ar…

玻璃制品行业丨外贸业务管理难点及解决方案

玻璃作为一种重要的建筑材料,在国际贸易中一直占有一定的份额。随着国外市场需求量的不断增加,对玻璃制品的技术含量要求越来越高,需要在研发方面的投入也逐步加大。由于国际市场竞争激烈,想要做玻璃制品行业的外贸公司&#xff0…

如何使用Python自动化测试工具Selenium进行网页自动化?

引言 Selenium是一个流行的Web自动化测试框架,它支持多种编程语言和浏览器,并提供了丰富的API和工具来模拟用户在浏览器中的行为。Selenium可以通过代码驱动浏览器自动化测试流程,包括页面导航、元素查找、数据填充、点击操作等。 与PyAuto…

华为网络设备查询系统时间及修改系统时间命令

查看当前系统时间 dis time all 手动修改系统时间clock datetime 14:25:00 2020-6-19

华为计算产品备件查询助手

华为计算产品备件查询助手 https://support-it.huawei.com/server-spareparts/#/spareparts

华为设备历史200条命令查询方法

有时配置误操作后又执行了很多新命令,需要复查或纠正时无法通过上下键直接翻到之前配置的命令,此时可以使用display history-command all-users 查询最近200条配置的命令,如下图所示:

Windows 查看是否激活

打开cmd 输入【slmgr.vbs /xpr】后按【回车键】 弹出如下对话框表示激活成功

如何查看电脑激活状态

** 如何查看电脑激活状态 ** 1 按下“winr”输入“slmgr.vbs -xpr” 2 点击“确定”。

查询office激活所剩时间

1.找到office安装的根目录 我的路径是C:\Program Files\Microsoft Office\Office16 2、在命令行输入cd C:\Program Files\Microsoft Office\Office16,回车 3、输入cscript ospp.vbs /dstatus,回车 这个时间就是激活剩余时间

华为官方解锁码申请

2019独角兽企业重金招聘Python工程师标准>>> 相关说明 • 本教程为华为解锁码申请教程,获取的解锁码用于刷机精灵刷机时弹出的解锁对话框里; 申请解锁码 • 点击进入 解锁页面 • 根据提示进行登录,没有帐号的请先进行注册&#x…

查看windows10是否永久激活

Windows10系统的功能十分强大,所以很多用户都开始体验这个系统。那么,我们在安装好Windows10系统后,该怎样查看系统是否激活了呢?是永久激活还只是180天的批量激活呢?下面,我为大家介绍一下查看Windows 10系…

iPhone如何查询序列号 iPhone激活时间查询

iPhone如何查询序列号 iPhone激活时间查询 在使用苹果产品的时候,往往需要查询产品激活时间,这就要查询iPhone序列号,那么iPhone如何查询序列号呢?今天小编就来介绍下,iPhone查询序列号的相关方法,希望给使…

华为9306 如何注册激活license 文件

S9300系列交换机作为华为主要运营商级、企业级核心、汇聚交换机,广泛应用在各行各业的不同环境下。但是作为重要功能的MPLS VPN、NQA和IPv6功能却需要单独申请许可,方能使用。 在不加载License的情况下,交换机基本功能可以正常使用。但是不支…

win10查看激活时间(Win10查看激活信息)

Win10系统如何批量激活查看天数? 方法一、 第一步、首先,我们可以从系统属性里直接找到。右击我的电脑选择属性。 第二步、拉到最下方,就可以看到Windows的激活选项。 方法二、 第一步、我们用命令直接读取。按下WInR,打开运行…

win10激活时间(win10激活时间查询)

怎么看windows10激活时间 查看方法: 1、首先打开Win10运行命令框,可以在开始菜单中找到,建议大家直接使用 Win R 组合快捷键打开; 2、打开运行命令框后,在打开后面键入或者粘贴上查看Win10激活命令:slmgr.…

Windows10 永久激活查询/激活时间查询/激活查询命令/激活码查询

1、使用 Windows R组合快捷键打开运行命令框 运行: slmgr.vbs -dlv 命令 可以查询到Win10的激活信息,包括:激活ID、安装ID、激活截止日期等信息。看不懂的继续往下。 2、运行: slmgr.vbs -dli 命令 可以查询到操作系统…

华为设备如何查看电源的序列号?

方式一&#xff1a;通过命令行查看电源模块的序列号 执行命令display elabel&#xff0c;根据命令提示&#xff0c;选择电源编号&#xff0c;可查看到如下电子标签信息&#xff0c;其中SN内容为电源模块序列号。 <HUAWEI> display elabel ?<1-1> The prese…

新买的华为Matebook,Office没激活,激活方法在这里!!!

二楼开始 看图说话 铁汁们看好了 新买了一台Matebook的笔记本&#xff0c;开机联网后Windows激活了&#xff0c;但是Microsoft Office 365无法激活&#xff0c;Office版本1803&#xff08;内部版本9126.2116&#xff09;——这个要不会看可用右键我的电脑高级设置属性看哦 需要…