前言:
这段时间学习了一下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,表的结构如下:
id | name | age |
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 的开发者有所帮助。