# 安装插件
egg-sequelize
sequelize 是一个广泛使用的 ORM 框架,它支持 MySQL、SQLite 和 MSSQL 、PostgreSQL等多个数据源
$ npm install egg-sequelize --save
在 config/plugin.js 中引入 egg-sequelize 插件
sequelize: {
enable: true,
package: 'egg-sequelize',
};
在 config/config.default.js 中编写 sequelize 配置
exports.sequelize = {
dialect: 'mysql', // support: mysql, mariadb, postgres, mssql
host: '127.0.0.1',
port: 3306,
database: 'egg-sequelize-doc-unittest', // /数据库名
};
mysql2
在 Web 应用方面 MySQL 是最常见,最好的关系型数据库之一。非常多网站都选择 MySQL 作为网站数据库。
$ npm install mysql2 --save
sequelize-cli
sequelize 提供了 sequelize-cli 工具来实现 Migrations,我们也可以在 egg 项目中引入 sequelize-cli。
$ npm install --save-dev sequelize-cli
在 egg 项目中,我们希望将所有数据库 Migrations 相关的内容都放在 database 目录下,所以我们在项目根目录下新建一个 .sequelizerc 配置文件:
const path = require('path');
module.exports = {
config: path.join(__dirname, 'database/config.json'),
'migrations-path': path.join(__dirname, 'database/migrations'),
'seeders-path': path.join(__dirname, 'database/seeders'),
'models-path': path.join(__dirname, 'app/model'),
};
初始化 Migrations 配置文件和目录
$ npx sequelize init:config
$ npx sequelize init:migrations
执行完后会生成 database/config.json 文件和 database/migrations 目录,我们修改一下 database/config.json 中的内容,将其改成我们项目中使用的数据库配置:
{
"development": {
"username": "root", // 账号
"password": null, // 密码
"database": "egg-sequelize-doc-default", // 数据库名
"host": "127.0.0.1",
"dialect": "mysql"
},
"test": {
"username": "root",
"password": null,
"database": "egg-sequelize-doc-unittest",
"host": "127.0.0.1",
"dialect": "mysql"
}
}
sequelize-auto
利用 sequelize-auto 对照数据库自动生成相应的models,使用sequelize-auto对照数据库自动生成相应的models减少了对数据库进行增删改查时的sql语句的编写
$ npm install --save-dev egg-sequelize-auto

egg-sequelize-auto -o ./app/model -h localhost -p 3306 -d [数据库] -u [用户名] -x [密码|'']
# 初始化数据库
利用我们定义的快捷命令我们可以很方便的创建我们所需要文件:
$ npm run db:init

然后把文件内容更改成以下内容:
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
const { INTEGER, STRING } = Sequelize
await queryInterface.createTable('users', {
id: {
type: INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: true,
comment: '唯一索引',
},
phone: {
type: STRING(11),
unique: true,
allowNull: true,
comment: '手机号',
},
password: {
type: STRING,
allowNull: true,
comment: '密码',
},
name: {
type: STRING(50),
allowNull: false,
comment: '昵称',
},
avatar: {
type: STRING,
allowNull: true,
comment: '头像',
}
})
},
down: async queryInterface => {
await queryInterface.dropTable('users');
}
};
# 数据库变更
执行下方命令之后,我们的数据库初始化就完成了
$ npm run db:up
// 升级数据库 `npm run db:up`
"db:up": "npx sequelize db:migrate && npm run db:model"
// 需要回滚,可以通过 `npm run db:down` 回退一个变更
"db:down": "npx sequelize db:migrate:undo"
// 可以通过 `npm run db:down-all` 回退到初始状态
"db:down-all": "npx sequelize db:migrate:undo:all"
并且会在model目录下帮我们创建 users 这个 model,如下:
/* indent size: 2 */
module.exports = app => {
const DataTypes = app.Sequelize;
const Model = app.model.define('users', {
id: {
type: DataTypes.INTEGER(11),
allowNull: true,
primaryKey: true,
autoIncrement: true
},
phone: {
type: DataTypes.STRING(11),
allowNull: true,
unique: true
},
password: {
type: DataTypes.STRING(255),
allowNull: true
},
name: {
type: DataTypes.STRING(50),
allowNull: false
},
avatar: {
type: DataTypes.STRING(255),
allowNull: true
}
}, {
tableName: 'users'
});
Model.associate = function() {
}
return Model;
};
这个 Model 就可以在 Controller 和 Service 中通过 app.model.Users 或者 ctx.model.Users 访问到了