ORM
Sequelize 是一个基于 promise 的 Node.js ORM, 目前支持 Postgres, MySQL, MariaDB, SQLite 以及 Microsoft SQL Server. 它具有强大的事务支持, 关联关系, 预读和延迟加载,读取复制等功能。
我们还是先来确认一个需求: 创建一个数据库和文章表
安装
将sequelize-cli 安装到全局,放便操作使用
npm i sequelize-cli -g
安装Sequelize以及链接mysql依赖
npm i sequelize mysql2
初始化
sequelize init
执行后会新增四个目录
├── config
├── migrations
├── models
├── seeders
- config:包含配置文件,连接数据库
- models:包含项目模型
- migrations:包含迁移文件 (数据表结构) 执行迁移命令后,数据库就有了相关表
- seeders:包含种子文件 (具体数据)
创建数据库数据库
修改配置
修改config/config.json 中的配置项, 里面默认会有三个环境, 本地使用dev环境
// 开发环境的数据库配置
"development": {
// 数据库用户名
"username": "root",
// 数据库密码
"password": "123456",
// 数据库名称
"database": "database_development",
// 数据库主机地址
"host": "127.0.0.1",
// 数据库类型
"dialect": "mysql"
},
创建
修改完成后执行命令创建
npx sequelize db:create
创建成功会展示
Sequelize CLI [Node: 14.21.2, CLI: 6.6.2, ORM: 6.37.3]
Loaded configuration file "config/config.json".
Using environment "development".
Database database_development created.
模型、迁移、种子
在开始前我们先得要弄明白三个概念
模型(Model)
在 Sequelize 中,模型用于定义数据库表的结构和关联。通过创建模型类,您可以指定表名、字段、数据类型、约束等。
迁移(Migration)
迁移用于处理数据库结构的更改,例如创建新表、添加或删除列、修改列的数据类型等。迁移文件通常包含两个方法:up 用于执行更改操作,down 用于回滚更改。
种子(Seeder) :
种子文件用于在数据库中填充初始数据,例如添加一些初始用户、文章等。
创建模型
创建一个article模型, 包含title、content、author字段, 也就是下面的命令
sequelize model:create --name article --attributes title:string,content:string,author:text
创建结束后会在models下创建一个article.js模型文件, 初始化的内容如下
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class article extends Model {
/**
* Helper method for defining associations.
* This method is not a part of Sequelize lifecycle.
* The `models/index` file will call this method automatically.
*/
static associate(models) {
// define association here
}
}
article.init({
title: DataTypes.STRING,
content: DataTypes.STRING,
author: DataTypes.TEXT
}, {
sequelize,
modelName: 'article',
});
return article;
};
同时还会在migration下面创建一个20240828114613-create-article.js的迁移文件(前面是当前日期),它的作用就是用来对数据库进行结构的创建或者修改。
此时,我们上面创建的数据库中还没有任何表结构。
执行迁移
上面我们在model中成生了article模型, 并根据article模型生成了相对应的迁移文件, 接下来我们需要的就是执行迁移文件生成表
sequelize db:migrate
执行结束后我们查看数据库
SequelizeMeta的表为默认生成,记录迁移记录
创建迁移
上面我们是在创建模型的时候直接创建的迁移文件, 那如果要修改存在的表也就是需要创建一个已经存在表的迁移文件呢
sequelize migration:create --name [attribute-name]
回退迁移
sequelize db:migrate:undo - 撤销上一次的迁移操作
sequelize db:migrate:undo:all - 撤销所有的迁移操作
sequelize db:migrate:undo --name 具体迁移脚本
构建数据/种子文件
创建种子文件
sequelize seed:generate --name file-name
执行后在seeders下会生成文件20240829091640-article.js, 里面默认会有一两个操作示例:添加-up和恢复-down
我们先参照up方法里面的注释来创建一千条数据
'use strict';
/** @type {import('sequelize-cli').Migration} */
module.exports = {
async up (queryInterface, Sequelize) {
/**
* Add seed commands here.
*
* Example:
* await queryInterface.bulkInsert('People', [{
* name: 'John Doe',
* isBetaMember: false
* }], {});
*/
let datas = []
for(let i = 0 ; i < 10000; i++){
datas.push({
title: `Article ${i}`,
content: `Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam, doloremque.`,
author: `xuesh`,
createdAt: new Date(),
updatedAt: new Date()
})
}
await queryInterface.bulkInsert('articles', datas, {})
},
async down (queryInterface, Sequelize) {
/**
* Add commands to revert seed here.
*
* Example:
* await queryInterface.bulkDelete('People', null, {});
*/
}
};
写完后, 执行操作命令
sequelize db:seed:all // 运行所有种子文件
结束后去数据库刷新,会发现数据已经创建成功
api接口
创建接口
要创建一个api接口, 我们先新建一个routes/article.js文件, 如下
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
res.json({ body: {}});
});
module.exports = router;
再返回来到app.js中引入挂载
const articleRouter = require('./routes/article');
var app = express();
app.use('/article', articleRouter);
此时我们通过get请求<http://127.0.0.1:3000/article>就可以获取到返回的结果。
接下来我们实现文章相关的具体api