在nodejs操作mySql数据库 中已经介绍了怎么使用nodejs链接mysql数据库,以及t通过Promise的方式封装了mysql执行sql获取数据,以及防止sql注入的escape方法。本章介绍orm数据关系映射 - Sequelize.
ORM
- Object Relation Mapping
数据表,用js中的模型(class或者对象)代替
一条或多条记录,用对象或者数组代替
sql语句,使用对象的方法代替
(1) 安装mysql和sequelize
npm i mysql2 sequelize –save
(2) 配置sequelize建立数据库连接
1 | const Sequelize = require('sequelize') |
(3)sequelize建模&同步到数据库
之前nodejs直接连接mysql,需要在mysql中先建表,然后再nodejs中通过mysql的connect实例进行sql的查询。
sequelize通过数据建模,然后就会同步到数据库中生成响应的表,然后通过api的方式进行增删改查,以及多表查询等操作。
sequelize是通过define方法建立模型的,Model相当于数据库中的表,该对象不能通过构造函数实例化,而只能通过
sequelize.define()或sequelize.import()方法创建
(3-1)创建数据模型
sequelize.define():define方法接收三个参数,第一个参数为表名称,第二个为所需要创建的数据库字段,第三个参数是相关表配置,具体配置参考文章结尾的连接 详细配置
更多阅读配置参数
Sequelize常用的数据类型,
文章结尾有详细的列表
- Sequelize.NOW - 获取当前时间
- Sequelize.STRING
- Sequelize.INTEGER
- Sequelize.TEXT
- Sequelize.DATE
- Sequelize.DECIMAL
数据模型中的参数
- type - Sequelize提供的类型
- allowNull - true/false 是否为空
- comment 备注信息
- pattern 按照正则匹配
- defaultValue 默认值
- unique - true/false是否唯一
- primaryKey - true/false 定义主键
- autoIncrement - true/false 可用于创建自增的整数列
- field - 属性指定自定义字段名称
1 | const Sequelize = require('sequelize') |
(3-2)创建数据表的外键
ModalA 多对一 ModalB
1
2
3 ModalA.belongsTo(ModalB,{
foreignKey:'ModalAForeignKeyName'
})
ModalB 一对多 ModalA
1
2
3 ModalB.hasMany(ModalA,{
foreignKey:'ModalAForeignKeyName'
})
- 上面两种api二选一就行了,但是为了连表查询,所以都写比较好,查询ModalA带出来ModalB。必须写第一种写法。反之亦然。
(3-3)测试sequelize是否连接成功 - authenticate()方法
1 | const seq = require('./seq') // 先导入sequelize连接实例 |
(3-4)同步模型到数据库 - sync()方法
force: true 如果表已经存在,将会丢弃表 ;
alter: true 如果表已存在,不丢弃,如果不存在会直接创建表
需要注意通过这种方式同步的表会在表名称后面
添加一个s作为复数
会自动生成
createdAt的创建时间,和修改时间updateAt,如果不需要这两个参数的话在define的第三个参数中修改表配置timestamps为false,默认为true
1 | const AaronTest = sequelize.define('project', { |
force的意思是同步中存在的表会删掉,重新创建一个新的
同步成功需要手动退出进程process.exit()
会自动生成id,并且设置成主键,自动增加
1 | const seq = require('./seq') // 先导入sequelize连接实例 |

在workbench中就可以看到数据表已经同步过来了。在
Database=>Reverse Engineer就可以生成E-R实体关系图
补充文档 - 详细的模型参数和类型参数
Model definition - 模型定义如下
1 | const Foo = sequelize.define('foo', { |
sequelize提供的几种数据类型,用于数据建模
1 | Sequelize.STRING // VARCHAR(255) 类型:字符串 最大值: 65535个字符 |
参考连接
Sequelize 中文文档 v4 - Model definition - 模型定义
