Egg 项目怎么连接 MySQL 实现增删改查接口?

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Egg 项目怎么连接 MySQL 实现增删改查接口?

egg-mysql 插件配置


1、安装插件 egg-mysql

npm install egg-mysql



dafb6b6e87524a14a2915405bf3e3e4c.png


配置参考:https://github.com/eggjs/egg-mysql


6b0a0f15f57d455a97e3e6bddf90b51a.png



2、配置 config/plugin.js

'use strict';
/** @type Egg.EggPlugin */
module.exports = {
  // had enabled by egg
  // static: {
  //   enable: true,
  // }
  ejs: {
    enable: true,
    package: 'egg-view-ejs'
  },
  mysql: {
    enable: true,
    package: 'egg-mysql'
  }
};



3、配置 config/config.default.js

将我们本地的数据库配置上去

/* eslint valid-jsdoc: "off" */
'use strict';
/**
 * @param {Egg.EggAppInfo} appInfo app info
 */
module.exports = appInfo => {
  /**
   * built-in config
   * @type {Egg.EggAppConfig}
   **/
  const config = exports = {};
  // use for cookie sign key, should change to your own and keep security
  config.keys = appInfo.name + '_1639205546588_1305';
  // add your middleware config here
  config.middleware = [];
  // add your user config here
  const userConfig = {
    // myAppName: 'egg',
  };
  config.view = {
    mapping: {'.html': 'ejs'}  // 左边写成.html后缀,会自动渲染.html文件
  };
  config.security = {
    csrf: {
      enable: false,
      ignoreJSON: true
    },
    domainWhiteList: [ '*' ], // 配置白名单
  };
  config.mysql = {
    // 单数据库信息配置
    client: {
      // host
      host: 'localhost',
      // 端口号
      port: '3306',
      // 用户名
      user: 'root',
      // 密码
      password: 'kaimo313', // 初始化密码,没设置的可以不写
      // 数据库名
      database: 'test', // 新建的数据库名称
    },
    // 是否加载到 app 上,默认开启
    app: true,
    // 是否加载到 agent 上,默认关闭
    agent: false,
  };
  return {
    ...config,
    ...userConfig,
  };
};


egg 连接 mysql实现增删改查


1、CRUD user guide

我们先看一下文档是怎么样处理 CRUD 的。


Create

// insert
const result = yield app.mysql.insert('posts', { title: 'Hello World' });
const insertSuccess = result.affectedRows === 1;


Read

// get
const post = yield app.mysql.get('posts', { id: 12 });
// query
const results = yield app.mysql.select('posts',{
  where: { status: 'draft' },
  orders: [['created_at','desc'], ['id','desc']],
  limit: 10,
  offset: 0
});


Update

// update by primary key ID, and refresh
const row = {
  id: 123,
  name: 'fengmk2',
  otherField: 'other field value',
  modifiedAt: app.mysql.literals.now, // `now()` on db server
};
const result = yield app.mysql.update('posts', row);
const updateSuccess = result.affectedRows === 1;


Delete

const result = yield app.mysql.delete('table-name', {
  name: 'fengmk2'
});




2、查询接口 /user 实现

2.1 router 层

router.get('/user', controller.home.user);



2.2 control 层

async user() {
  const { ctx } = this;
  const userData = await ctx.service.home.user();
  ctx.body = userData;
}



2.3 service 层

async user() {
  const { ctx, app } = this;
  const QUERY_STR = 'id, name';
  // 获取 id 的 sql 语句
  let sql = `select ${QUERY_STR} from list`;
  try {
    // mysql 实例已经挂载到 app 对象下,可以通过 app.mysql 获取到。
    const result = await app.mysql.query(sql);
    return result;
  } catch (error) {
    console.log(error);
    return null;
  }
}


结果如下:

a662ccbb491f4bd98d25d2549f80a5f5.png



3、新增接口 /add_user 实现

3.1 router 层

router.post('/add_user', controller.home.add_user);


3.2 control 层

async add_user() {
  const { ctx } = this;
  const { name } = ctx.request.body;
  try {
    const result = await ctx.service.home.add_user(name);
    ctx.body = {
      status: 200,
      desc: '新增成功',
      data: null
    }
  } catch (error) {
    ctx.body = {
      status: 500,
      desc: '新增失败',
      data: null
    }
  }
}


3.3 service 层

async add_user(name) {
  const { ctx, app } = this;
  try {
    // 给 list 表,新增一条数据
    const result = await app.mysql.insert('list', { name });
    return result;
  } catch (error) {
    console.log(error);
    return null;
  }
}


我用 postman 发送了三次新增

4ee9d194ae34447ba10c3acedea08d3f.png



刷新数据库我们发现多了三条数据。


62b0ee56db354d4cbd34852200f35d32.png




4、更新接口 /update_user 实现

4.1 router 层

router.post('/update_user', controller.home.update_user);



4.2 control 层

async update_user() {
  const { ctx } = this;
  const {id, name} = ctx.request.body;
  try {
    const result = await ctx.service.home.update_user(id, name);
    ctx.body = {
      status: 200,
      desc: '更新成功',
      data: null
    }
  } catch (error) {
    ctx.body = {
      status: 500,
      desc: '更新失败',
      data: null
    }
  }
}



4.3 service 层

async update_user(id, name) {
  const { ctx, app } = this;
  try {
    // 给 list 表,更新一条数据
    const result = await app.mysql.update('list', {name}, {
      where: { id }
    });
    return result;
  } catch (error) {
    console.log(error);
    return null;
  }
}



更新 id 为 2 的数据:



a0f86558f5b34e45b1ab0c1f27fdc53b.png



5、更新接口 /delete_user 实现


5.1 router 层

router.post('/delete_user', controller.home.delete_user);



5.2 control 层

async delete_user() {
  const { ctx } = this;
  const {id} = ctx.request.body;
  try {
    const result = await ctx.service.home.delete_user(id);
    ctx.body = {
      status: 200,
      desc: '删除成功',
      data: null
    }
  } catch (error) {
    ctx.body = {
      status: 500,
      desc: '删除失败',
      data: null
    }
  }
}



5.3 service 层

async delete_user(id) {
  const { ctx, app } = this;
  try {
    // 给 list 表,删除一条数据
    const result = await app.mysql.delete('list', {id});
    return result;
  } catch (error) {
    console.log(error);
    return null;
  }
}



8509ee3575ed40c9bb2ac50fde8f39a7.png




a77ddbb5eeb6407fa2195ac95e2ba62f.png


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
11天前
|
分布式计算 关系型数据库 MySQL
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型 图像处理 光通信 分布式计算 算法语言 信息技术 计算机应用
34 8
|
10天前
|
安全 关系型数据库 MySQL
【赵渝强老师】MySQL的连接方式
本文介绍了MySQL数据库服务器启动后的三种连接方式:本地连接、远程连接和安全连接。详细步骤包括使用root用户登录、修改密码、创建新用户、授权及配置SSL等。并附有视频讲解,帮助读者更好地理解和操作。
|
24天前
|
SQL Java 关系型数据库
java连接mysql查询数据(基础版,无框架)
【10月更文挑战第12天】该示例展示了如何使用Java通过JDBC连接MySQL数据库并查询数据。首先在项目中引入`mysql-connector-java`依赖,然后通过`JdbcUtil`类中的`main`方法实现数据库连接、执行SQL查询及结果处理,最后关闭相关资源。
|
27天前
|
SQL JavaScript 关系型数据库
node博客小项目:接口开发、连接mysql数据库
【10月更文挑战第14天】node博客小项目:接口开发、连接mysql数据库
|
1月前
|
Java 关系型数据库 MySQL
【编程基础知识】Eclipse连接MySQL 8.0时的JDK版本和驱动问题全解析
本文详细解析了在使用Eclipse连接MySQL 8.0时常见的JDK版本不兼容、驱动类错误和时区设置问题,并提供了清晰的解决方案。通过正确配置JDK版本、选择合适的驱动类和设置时区,确保Java应用能够顺利连接MySQL 8.0。
141 1
|
20天前
|
关系型数据库 MySQL Java
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
22 0
|
9天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
24 1
|
11天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
26 4
|
1月前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
61 3
Mysql(4)—数据库索引
|
18天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
85 1