当前位置: 首页 > article >正文

Sequelize:Node.js 项目中数据库管理的 “秘密武器”

前言:

        这段时间学习了一下Sequelize库,通过这篇文章与大家分享一下学习过程中获得的经验。因为是刚刚才开始学习,可能会有疏忽的地方,欢迎各位大佬在评论区指点指点。

简介:

        Sequelize是一个基于Node.js的ORM库,支持多种关系型数据,就比如说常用到的MySQL,以及PostgreSQL、SQLite等等。他允许开发者通过JavaScript或TypeScript对象操作数据库,不需要直接编写SQL语句,简化了数据库交互流程,提升开发效率。

核心特征:

1.多数据支持

        兼容主流关系型数据库(如 PostgreSQL、MySQL、SQLite),通过适配不同数据库驱动实现。

2.模型定义

        使用 JavaScript 类或 define 方法定义数据模型,每个模型对应数据库中的一张表。

3.数据关联

        支持一对一、一对多、多对多关联关系(如 belongsTo ,hasMany ,belongsToMany)。

4.事务管理

        提供事务(Transaction)支持,确保复杂操作的原子性。

5.查询构建器

        链式 API 或面向对象方式构建复杂查询(如 findAll ,where ,include 预加载关联数据)。

6.数据验证与钩子

        内置验证器(如 isEmail ,len ),支持自定义验证逻辑和生命周期钩子(如 beforeCreate,afterUpdate)。

7.迁移与同步

        提供 CLI 工具管理数据库迁移(版本控制),也支持 sync() 方法同步模型结构到数据库(适合开发环境)。

8.TypeScript

        完全用 TypeScript 重写,提供类型安全和智能提示。

快速上手:

1.创建数据库

        我是用的 XP.cn 来起的数据库。

        使用 Navicat Premium 新建数据库和表,表名为user,表的结构如下:

idnameage
1张三22

2.下载依赖 

        首先通过 npm init 来初始化一个新的Node.js项目,下载sequelize库,我这边使用的是mysql数据库,因此需要下载mysql。下载顺序如下:

// 初始化
npm init

// 导入Sequelize的包文件
npm i sequelize

// 导入数据库的驱动包(这里以MySQL为例)
npm i mysql2

3.配置文件

        在根目录下创建一个js文件作为Sequelize的配置文件,我这边命名为 mysql_connection.js。代码如下:

const { Sequelize } = require('sequelize');

/**
 * 创建 Sequelize 实例
 * 第一个参数:数据库名称
 * 第二个参数:数据库用户名
 * 第三个参数:数据库密码
 */
const mysql = new Sequelize('db', 'root', 'root', {
    dialect: 'mysql', // 数据库类型
    host: 'localhost', // MySQL 主机
    port: 3306, // MySQL 默认端口
    pool: {
        max: 5, // 连接池最大连接数
        min: 0, // 连接池最小连接数
        acquire: 30000, // 获取连接的最大等待时间(毫秒)
        idle: 10000 // 连接在释放之前可以空闲的最长时间(毫秒)
    }
})

        然后我们可以测试连接是否连接成功。代码如下:

// 测试连接是否成功
mysql.authenticate()
    .then(() => {
        console.log('Connection has been established successfully.');
    })
    .catch(err => {
        console.error('Unable to connect to the database:', err);
    });

        在控制台通过 node mysql_connection.js 打印结果,观察结果看是否连接成功。

        连接成功后将测试代码注释掉,并将连接对象mysql导出。

// 将连接对象导出
module.exports = mysql

4.模型文件

        新建文件,我命名为 book_model.js 。在模型文件中定义与数据表user对应的模型。代码如下:
 

const { DataTypes } = require('sequelize')
// 将数据库连接对象导入
const sequelize = require('./mysql_connection')

const User = sequelize.define('User', {
    id: {
        type: DataTypes.INTEGER,
        primaryKey: true,
        unique: true // 同一表中不允许重复的
    },
    name: {
        type: DataTypes.STRING(10), // 表示该字段最多存储 10 个字符
        allowNull: false
    },
    age: {
        type: DataTypes.INTEGER,
        allowNull: false,
        defaultValue: 18 // 若未提供 age,则默认为 18
    }
}, {
    tableName: 'user',
    timestamps: false
});

module.exports = User;

5.数据操作

        新建文件,我命名为user_service.js。在该文件中我们可以对数据库中的数据进行操作(增删改查)。代码如下:

const User = require('./book_model')

async function runDemo() {
    try {
      // 创建用户
      const newUser = await User.create({
        id: 2,
        name: '小明',
        age: 25
      });
      console.log('创建用户:', newUser.toJSON());
  
      // 查询所有用户
      const allUsers = await User.findAll(); 
      console.log('所有用户:', JSON.stringify(allUsers, null, 2));
  
      // 更新用户
      await User.update({ name: '李四' }, { where: { id: 2 } });
      console.log('用户已更新');
  
      // 查询单个用户
      const user = await User.findOne({ where: { name: '张三' } });
      console.log('查询用户:', user?.toJSON());
  
      // 删除用户
      await User.destroy({ where: { id: 2 } });
      console.log('用户已删除');
  
    } catch (error) {
      console.error('操作失败:', error);
    }
  }
  
  module.exports = { runDemo };

6.主入口文件

        新建文件夹作为主入口文件,我命名为index.js。

        主入口文件是 Node.js 项目的“大脑”,负责统筹全局、管理资源、处理错误,并定义程序的执行流程。它是项目结构的核心,确保代码的组织性和可维护性。

const { runDemo } = require('./user_service')
const mysql = require('./mysql_connection')

async function main() {
    try {
      await mysql.sync(); // 同步模型
      console.log('模型已同步');
      await runDemo();  // 执行业务逻辑示例
    } finally {
      // 关闭数据库连接
      await mysql.close(); // 关闭连接
      console.log('数据库连接已关闭');
    }
  }
  
  main();

7.运行

        最后一步就可以把我们的代码运行看看了,通过 node index.js 指令运行。

        通过运行结果可以看到,依次进行了创建用户、查询所有用户、更新用户、查询单个用户、删除用户操作。

总结:

        Sequelize 是一个功能强大且灵活的 Node.js ORM 工具,通过这次学习,我掌握了其基本的使用方法和核心概念。在未来的项目中,我将继续运用 Sequelize,进一步探索其高级特性,如复杂查询优化、数据库迁移等。同时,我也会关注 Sequelize 的更新和发展,不断提升自己在数据库开发方面的能力。

        通过对 Sequelize 的学习和实践,我相信它将为我的开发工作带来更多的便利和效率,也希望我的学习总结能够对其他学习 Sequelize 的开发者有所帮助。


http://www.kler.cn/a/587566.html

相关文章:

  • 洛谷 P2801 教主的魔法 题解
  • Mac 上编译 Ragflow
  • 《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(39)玲珑棋局摆硬币 - 零钱兑换(完全背包)
  • python列表基础知识
  • 3.4 Spring Boot整合Elasticsearch:全文检索与聚合分析
  • 信奥赛CSP-J复赛集训(模拟算法专题)(16):P6386 [COCI 2007/2008 #4] VAUVAU
  • Linux下对2TB磁盘的分区、格式化、挂截目录介绍
  • 用Python和Pygame实现打砖块游戏
  • HTML编辑MP4保存名称
  • DBeaver部分操作指南(数据库连接,构造ERD图,格式化SQL)
  • Hive函数大全:从核心内置函数到自定义UDF实战指南(附详细案例与总结)
  • 无电池也能通信!中国移动5G-A芯片重塑物联网未来
  • P2512糖果传递 P4447分组 P1080国王游戏 P4053建筑抢修
  • Python 字节码深度历险:dis 模块揭秘与性能优化实战
  • 深入探讨RAID 5的性能与容错能力:实验与分析(磁盘阵列)
  • Vue 中的 MVVM、MVC 和 MVP 模式深度解析
  • Java数据结构第二十三期:Map与Set的高效应用之道(二)
  • 深度迁移学习实战指南:从理论到产业级应用
  • 安装 MongoDB 的步骤(Windows / macOS / Linux)
  • Excel表一键查询工具