Eggjs笔记:egg-mysql插件的集成, curd操作, 事务演示

本文详细介绍egg-mysql插件的安装配置与使用方法,包括数据库连接配置、基本CRUD操作及事务处理,适用于Egg.js框架的后端开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值