egg-mysql的安装配置
- 在 egg 项目中安装 egg-mysql $
npm i egg-mysql --save
- 启用egg-mysql插件
// 在 {app_root}/config/plugin.js 中 exports.mysql = { enable: true, package: 'egg-mysql' };
- 在配置文件中配置mysql数据库连接地址
// {app_root}/config/config.default.js exports.mysql = { // database configuration client: { // host host: 'mysql.com', // port port: '3306', // username user: 'test_user', // password password: 'test_password', // database database: 'test', }, // load into app, default is open app: true, // load into agent, default is close agent: false, };
egg-mysql的使用
-
查找数据的第一种方式
const result = await this.app.mysql.get('user', { id: 2 });
-
查找数据的另一种方式
const result = await this.app.mysql.select('user',{ where: { id: '3' }, // orders: [['created_at','desc'], ['id','desc']], limit: 10, offset: 0 });
-
增加数据
const result = await this.app.mysql.insert('user', { username: '赵四','password':'223423' });
-
修改数据的第一种方式:根据主键修改
const row = { id: 7, username: '赵四' }; const result = await this.app.mysql.update('user', row);
-
修改数据的第二种方式:通过 sql 来修改数据
const results = await this.app.mysql.query('update user set username = ? where id = ?', [6666, 8]);
-
删除数据
const result = await this.app.mysql.delete('user', {username: '赵四' });
-
执行 sql
app.mysql.query(sql, values);
-
mysql 事务:是指作为单个罗家集工作单元执行的一系列操作,要么完全执行,要么完全不执行
- A账户扣钱-5,B账户进账+5 不能有单方成功,否则存在问题
const conn = await this.app.mysql.beginTransaction(); try { await conn.insert('user', { 'username': 'hahahh','password':'223423' }); const row = { id: 8,username: '王麻子'}; await conn.update('user', row); await conn.commit(); } catch (err) { // rollback call won't throw err await conn.rollback(); throw err; }
- 备注:在mongodb新版也支持事务,必须创建MongoDB副本集(主从数据库)
-
完整演示代码
'use strict'; const Controller = require('egg').Controller; class UserController extends Controller { async index() { const { ctx } = this; ctx.body = await this.service.user.getUserList(); } // mysql的crud async sql() { const { ctx, app } = this; // ctx.body = await this.service.user.getUserList(); // 第一种根据id查询数据 // ctx.body = await app.mysql.get('user', { id: 1 }); // 第二种查询全部数据 // ctx.body = await app.mysql.select('user'); // ctx.body = await app.mysql.select('user', {}); // 或者这种都可以 // 第三种查询条件 /* ctx.body = await app.mysql.select('user', { where: { id: 1 }, // orders: [['id','desc']], // 按id的降序 limit: 10, offset: 0, }); */ // 新增用户 /* ctx.body = await app.mysql.insert('user', { username: 'test1', password: '123456', }); */ // 修改用户 id为4的用户 硬编码演示 /* ctx.body = await app.mysql.update('user', { id: 4, username: 'test2', }); */ // 修改用户 执行sql的方式来修改 第一个参数是sql,第二个参数是sql中的参数 // ctx.body = await app.mysql.query('update user set username=? , password=? where id=?', [ 'admin_super', '111111', 1 ]); // 删除用户 // ctx.body = await app.mysql.delete('user', { id: 4 }); // 查询语言,通过sql // ctx.body = await app.mysql.query('select * from user where id=?', [ 1 ]); // 事务 const conn = await app.mysql.beginTransaction(); try { await conn.insert('user', { username: 'test2', password: '666666' }); // 增加数据操作 await conn.update('user', { id: 1, username: 'admin' }); // 修改数据操作 await conn.commit(); ctx.body = '事务成功'; } catch (err) { // rollback call won't throw err await conn.rollback(); ctx.body = '事务失败!'; throw err; } } } module.exports = UserController;