一、什么是Sequelize?

Sequelize是一个基于Promise的Node.js ORM,它具有强大的事务支持,关联关系,预读和延迟加载,读取复制等功能。

二、使用Sequelize操作MySQL数据库

更多操作方法,请参考官方文档:https://eggjs.org/zh-cn/tutorials/sequelize.html

  1. 安装egg-sequelize以及mysql2

  2. 在config/plugin.js中引入egg-sequelize插件

exports.sequelize = {
    enable: true,
    package: 'egg-sequelize'
};
  1. 在config/config.default.js中添加下面的配置
config.sequelize = {
    dialect: 'mysql',
    host: '127.0.0.1',
    port: 3306,
    database: 'bank',
    username: 'root',
    password: "123456"
  };

三、Sequelize操作MySQL实现数据的增删改查

  1. 在app下新建文件夹model,并在model中创建文件user.js

注意:如果define中的是user,我们定义的数据表要是users,也就是说需要是复数形式。

'use strict';

module.exports = app => {
  const { STRING, INTEGER, DATE } = app.Sequelize;

  const User = app.model.define('user', {
    id: { type: INTEGER, primaryKey: true, autoIncrement: true },
    username: STRING(30),
    age: INTEGER,
    sex: STRING(30),
    created_at: DATE,
    updated_at: DATE,
  });

  return User;
};
  1. 可以通过Navicat可视化工具建立下面的数据表结构

Egg中使用Sequelize ORM框架操作MySQL--增删改查_主键

增加数据

  // 增加数据
  async create() {
    const user = await this.ctx.model.User.create({username: "张三",age: 20});
    this.ctx.body = user;
  }

查询数据

更多其他的查询方法,请查看官方文档:https://www.sequelize.com.cn/core-concepts/model-querying-finders

  1. 查询所有数据
  // 查询数据
  async query() {
    const userList = await this.ctx.model.User.findAll();
    this.ctx.body = userList;
  }
  1. 查询指定字段的数据
// 查询指定字段的数据
const userList = await this.ctx.model.User.findAll({attributes: ['id','username']});
  1. 应用where进行查询
const userList = await this.ctx.model.User.findAll({where: {"id": 2}});
  1. 对数据进行排序
const userList = await this.ctx.model.User.findAll({order: [['id', 'ASC']]});

修改数据

  • 根据主键进行修改
  async update() {
    // 根据主键修改
    const user = await this.ctx.model.User.findByPk(2);
    user.update({"username": "秦二世","age": 10});
    this.ctx.body = "修改成功"
  }

删除数据

  • 根据主键删除某个数据
  async delete() {
    const data = await this.ctx.model.User.findByPk(2);
    if (!data) {
      this.ctx.state = 404;
      return;
    }
    data.destroy();
    this.ctx.body = "删除成功";
  }