Sequelize:Node.js 中的强大 ORM 框架
作者:mmseoamin日期:2023-12-14

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

目录

    • 前言
      • 优势:提高效率,不用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:Node.js 中的强大 ORM 框架,在这里插入图片描述,第1张

                  Sequelize:Node.js 中的强大 ORM 框架,在这里插入图片描述,第2张

                  三、针对数据库已经建好的表可以使用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/ 下面的所有 文件就是我们需要的。

                  Sequelize:Node.js 中的强大 ORM 框架,在这里插入图片描述,第3张

                  四、express中引入使用

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

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

                  Sequelize:Node.js 中的强大 ORM 框架,在这里插入图片描述,第4张

                  五、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/