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

//or

yarn 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.body
	try {
		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.body
	try {
		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.body
	try {
		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.body
	try {
		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.body
	try {
		const data = await Article.findOne({
			where: { id }
		});
		response.send(success(data))
	} catch (error) {
		response.send(fail(error))
	}
});

7、关联查询后续补充。

六、更多用法

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【网络协议详解】——DNS系统协议(学习笔记)

目录 🕒 1. DNS的作用🕒 2. 域名结构🕒 3. 域名分类🕒 4. 域名空间🕒 5. 域名服务器类型🕘 5.1 根域名服务器🕘 5.2 顶级域名服务器🕘 5.3 权限域名服务器🕘 5.4 本地域名…

英睿达内存条正品鉴别教程(镁光颗粒)

我们打算买一款二手镁光颗粒的英睿达内存条,需要从正面内存标签上的条形码、字串,从背面颗粒上的两行字符一一分析、检查、鉴别,最终确认是否正品,以及内存条等级如何。通过本片文章,您能学会如何进行镁光颗粒的英睿达内存条正品鉴别。 一、标签检查 首先,用百度条形码…

[数据集][目标检测]目标检测数据集大白菜数据集VOC格式1557张

数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):1557 标注数量(xml文件个数):1557 标注类别数:1 标注类别名称:["cabbage"] 每…

mysql查询语句执行过程及运行原理命令

Mysql查询语句执行原理 数据库查询语句如何执行? DML语句首先进行语法分析,对使用sql表示的查询进行语法分析,生成查询语法分析树。语义检查:检查sql中所涉及的对象以及是否在数据库中存在,用户是否具有操作权限等视…

Spring Boot 数据库操作Druid和HikariDataSource

目录 Spring Boot 数据库操作 应用实例-需求 创建测试数据库和表 进行数据库开发, 在pom.xml 引入data-jdbc starter 参考官方文档 需要在pom.xml 指定导入数据库驱动 在application.yml 配置操作数据源的信息 创建bean\Furn.java 测试结果 整合Druid 到…

编码,Part 1:ASCII、汉字及 Unicode 标准

个人博客 编码的历史由来就懒得介绍了,只需要知道人类处理文本信息是以字符为基本单位,而计算机在最底层只认识 0/1,所以当计算机要为人类存储/呈现字符时,就需要有一个规则,在字符和 0/1 序列之间建立映射关系&#…

Java经典笔试题—day14

Java经典笔试题—day14 🔎选择题🔎编程题🍭计算日期到天数转换🍭幸运的袋子 🔎结尾 🔎选择题 (1)定义学生、教师和课程的关系模式 S (S#,Sn,Sd,Dc,SA )(其属性分别为学号、姓名、所…

网络通信IO模型上

计算机组成 计算机由软件和硬件组成,软件包括CPU、内存等,硬件包括主板,磁盘,IO设备(网卡、鼠标、键盘等)、电源按钮。 内核程序加载过程 当接通电源的时候1、BIOS就会把它的一段代码放入了内存当中&#…

压缩感知重构算法之正交匹配追踪算法(OMP)

算法的重构是压缩感知中重要的一步,是压缩感知的关键之处。因为重构算法关系着信号能否精确重建,国内外的研究学者致力于压缩感知的信号重建,并且取得了很大的进展,提出了很多的重构算法,每种算法都各有自己的优缺点&a…

C语言---初识指针

1、指针是什么 指针是什么? 指针理解的2个要点: ​ 1、指针是内存中一个最小单元的编号,也就是地址。 ​ 2、平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量 总结:指针就是地址&#xff…

Kali-linux Arpspoof工具

Arpspoof是一个非常好的ARP欺骗的源代码程序。它的运行不会影响整个网络的通信,该工具通过替换传输中的数据从而达到对目标的欺骗。本节将介绍Arpspoof工具的 使用。 9.8.1 URL流量操纵攻击 URL流量操作非常类似于中间人攻击,通过目标主机将路由流量注…

Sentinel的另外三种流控模式(附代码详细介绍)

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将详细介绍Sentinel的其他三种流控模式,后续文章将详细介绍Sentinel的其他知识。 如果文章有什么需要改进的地方还请大佬不吝赐教👏&#…

vue面试题汇总

HTML篇CSS篇JS篇TypeScript篇前端面试题汇总大全(含答案超详细,HTML,JS,CSS汇总篇)-- 持续更新前端面试题汇总大全二(含答案超详细,Vue,TypeScript,React,Webpack 汇总篇&#xff09…

04_Cenos安装Docker

docker安装文档: ubuntu:https://docs.docker.com/engine/install/ubuntu/ centos:https://docs.docker.com/engine/install/centos/ debian:https://docs.docker.com/engine/install/debian/ cenos安装Docker前提: 必…

数据结构(C语言):顺序循环队列的基本操作

一、题目 设队列的元素类型为char,实现顺序循环队列的各种基本操作的程序: ① 初始化队列Q; ② 判断队列Q是否为空; ③ 入队操作。循环调用入队操作,将若干元素(不少于10个)入队&#xff1b…

优化带排序的分页查询

优化带排序的分页查询 浅分页: select user_no,user_name,socre from student order by score desc limit 5,20 深分页: select user_no,user_name,socre from student order by score desc limit 80000,20 因为偏移量深分页更大,所以深分页执…

【软件】无联网情况下安装Win11 / 华为电脑更换Win11系统后触摸屏、声卡失效物理解决方案

一、提前备份好电脑驱动(华为电脑更换Win11系统后触摸屏、声卡失效物理解决方案) 1.电脑驱动备份方法: 1)通过管理员身份打开命令提示符。 2)输入命令:dism /online /export-driver /destination:"D…

聊聊Go语言的控制语句

在高级编程语言中,控制流语句(control-flow statement)是一类用于控制程序执行流程的语句,以下简称为控制语句。它们可以根据条件或循环执行相应的代码块,或者跳转到指定位置执行代码。 常见的控制语句包括: 条件语句:…

10. python字典

文章目录 一、什么是字典二、访问键-值对三、添加、修改键-值对四、删除键-值对4.1 语句del4.2 方法pop() 五、创建空字典六、遍历字典6.1方法items()6.2方法keys()6.3方法values() 七、嵌套7.1 字典列表7.2 在字典中存储列表7.3 在字典中存储字典 一、什么是字典 #创建一个字…

电商服务智能解决方案

互联网时代,智能客服已成为电商企业客户服务、管理和运营的标配。面临大量客户咨询、订单流程等业务,传统人工客服工作时间有限、人员流动性大、人工成本持续上涨等,已经无法满足电商企业“数智化”转型的需求,这也促使AI成为电商…