笔者最近使用koa2 + mySQL + ts写后台,使用sequelize作为orm语言,虽然是第二次使用,但是由于场景和设备更换,搜索引擎得到的资料分散等等问题,使用sequelize时还是发生了一系列不愉快的事情,掉了很多坑,以此作为一个完整的记录,希望之后大家都少踩一些坑。可能后期为了便于搜索,还是会把这篇博客再拆出几篇来。
注意⚠️:笔者使用的是mysql,下边一些sequelize安装配置的操作对齐的都是mysql
什么是orm,什么是sequelize,为什么使用它?
- 首先ORM是一个缩写【O->Object,RM->Relational (关系) Mapping(映射)】,它是一种把数据库映射成对象的手段,然后我们就可以通过操作对象去达到间接操作数据库的目的。
- 它的优势是不需要去直接接触SQL,但是遇到很复杂的查询时性能会比较差,但是一般情况使用起来还是没有问题的。
- sequelize就是nodejs的一种orm框架,还有一些其他的框架诸如TypeORM,ORM2,目前star数量最多的就是sequelize
sequelize的初步使用
安装:
$ npm install --save sequelize
$ npm install --save mysql2
sequelize连接数据库,以及连接位置
建议把数据库的信息抽离成配置文件,修改以及多人协同开发会方便一些:
// config.ts
exports const config = {
database: {
dbName: 'management',
host: 'localhost',
port: 3306,
user: 'root',
password: '12345678'
}
}
连接数据库:
// db.js
import {
Sequelize } from 'sequelize';
import {
config } from './config';
const {
dbName, host, port, user, password } = config;
export const sequelize = new Sequelize(dbName, user, password, {
dialect: 'mysql',
host,
port,
logging: true,
timezone: '+08:00',
define: {
// create_time && update_time
timestamps: true,
// delete_time
paranoid: true,
createdAt: 'created_at', //自定义时间戳
updatedAt: 'updated_at',
deletedAt: 'deleted_at',
// 把驼峰命名转换为下划线
underscored: true,
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
},
/* scopes: {
bh: {
attributes: {
exclude: ['password', 'updated_at', 'deleted_at', 'created_at']
}
},
iv: {
attributes: {
exclude: ['content', 'password', 'updated_at', 'deleted_at']
}
}
} */
}
})
注: 如果使用的是vscode,可以在插件那里找一个mysql,安装后按照指引可以在vscode直接操作数据库的数据字段等,懒癌星人必备。
sequelize-automate自动映射
- 连接数据库后,第一步就需要建立对应的Model,很多文档教手写model,但是每个字段就要定义类型、默认值、是否为NULL、字段名等,表中字段越多就越麻烦,我还是偏好自动生成model,而sequelize-automate所作正是连接数据库,并从数据库中读出所有表,生成对应的模型文件。
- 去年第一次使用的时候