egg-mysql 比较适合于中小型业务需求,对于比较复杂的业务需求:

  • 分页
  • 多表联查
  • ….

官网

Sequelize 是一种 ORM框架。

ORM(Object Relational Mapping)框架采用元数据来描述对象与关系映射的细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中。简单理解为一种框架的格式

egg 也准备好了配置

安装

yarn add egg-sequelize mysql2

配置

plugin.js

  1. exports.sequelize = {
  2. enable: true,
  3. package: 'egg-sequelize',
  4. };

config.default.js

  1. config.sequelize = {
  2. dialect: 'mysql',
  3. host: '127.0.0.1',
  4. port: '3306',
  5. user: 'root',
  6. password: '0000mysql',
  7. database: 'egg',
  8. define: {
  9. timestamps: false,
  10. freezeTableName: true,
  11. },
  12. };

使用

在 sequelize 中,每个表都当作一个模型,然后 可以对其一些属性进行设置,并且在 model 文件夹中的操作文件也最好与表名一致
app/model/user.js

  1. 'use strict';
  2. module.exports = app => {
  3. const { STRING, INTEGER } = app.Sequelize;
  4. // 参数:1.表名称(模型名称) 2.表字段
  5. const User = app.model.define('user', {
  6. id: { type: INTEGER, primaryKey: true, autoIncrement: true },
  7. name: STRING(20),
  8. pwd: STRING(50),
  9. });
  10. return User;
  11. };

const { STRING, INTEGER } = app.Sequelize; 字段type
app.model.define参数 : 1.表名称(模型名称) 2.表字段

controller/user.js

  1. const res = await ctx.model.User.findAll({
  2. where: { id: 1 },
  3. });

引用 ctx.model.UserUser 就是刚刚暴露的对象,其中有findAll方法,如果其中没有参数,就是选择表中全部数据;如果有参数:参数接收一个对象

  1. {
  2. where: { id: 1 }, // 选择条件
  3. limit: 2, // 分页:每一页限制一条数据
  4. offset: 0, // 偏移量
  5. }

只查单条数据
ctx.model.User.findByPk()

  1. const res = await ctx.model.User.findByPk(ctx.params.id);
  2. ctx.body = res;

  1. const res = await ctx.model.User.create(ctx.request.body);

  1. // 先判断该id是否存在
  2. const user = await ctx.model.User.findByPk(
  3. ctx.request.body.id
  4. );
  5. if (!user) {
  6. ctx.body = { status: 404, errMsg: 'id not finded' };
  7. return;
  8. }
  9. const res = user.update(ctx.request.body);
  10. ctx.body = { status: 200, data: res };

  1. const user = await ctx.model.User.findByPk(
  2. ctx.request.body.id
  3. );
  4. if (!user) {
  5. ctx.body = { status: 404, errMsg: 'id not finded' };
  6. return;
  7. }
  8. const res = user.destroy(ctx.request.body.id);
  9. ctx.body = { status: 200, data: res };