【RuoYi-Eggjs】:让 MySQL 更简单

简介: 【RuoYi-Eggjs-Mysql】是一款专为Egg.js打造的MySQL插件,基于mysql2封装,提供简洁API、自动驼峰转换、时区支持、SQL执行监控与事务管理,开箱即用,助力Node.js开发者高效操作数据库,提升开发体验。

【RuoYi-Eggjs】:让 MySQL 更简单

前言

在 Node.js 开发中,操作数据库是最常见的需求之一。虽然 mysql2 库功能强大,但在 Egg.js 项目中直接使用还需要处理连接池、配置管理等繁琐的工作。[ruoyi-eggjs-mysql](https://github.com/undsky/ruoyi-eggjs-mysql) 就是为了解决这个痛点而生的——它是一个基于 mysql2 的 Egg.js 插件,提供了开箱即用的数据库操作能力。

核心特性

🚀 简洁的 API 设计

插件封装了最常用的数据库操作,让代码更加直观:

// 查询单条记录
const user = await app.mysql.select('SELECT * FROM users WHERE id = 1');

// 查询多条记录
const users = await app.mysql.selects('SELECT * FROM users WHERE age > 18');

// 插入数据
const insertId = await app.mysql.insert("INSERT INTO users (name, age) VALUES ('张三', 25)");

// 更新数据
const affectedRows = await app.mysql.update("UPDATE users SET age = 26 WHERE id = 1");

// 删除数据
const deleted = await app.mysql.del("DELETE FROM users WHERE id = 1");

📊 执行SQL实时输出并显示执行时间

在开发过程中,了解每条 SQL 的执行性能至关重要。ruoyi-eggjs-mysql 插件内置了智能的 SQL 执行监控功能,每次执行 SQL 时都会在控制台实时输出执行信息,让性能优化变得一目了然。当你执行任何数据库操作时,插件会自动在控制台输出:

  • SQL 语句内容:完整的 SQL 命令,方便调试
  • 执行耗时:精确到毫秒的执行时间,帮助定位慢查询

🔄 智能驼峰命名转换

支持自动将数据库字段从 snake_case 转换为 camelCase,让前后端数据格式保持一致:

// 配置开启驼峰转换
config.mysql = {
   
  camelCase: true,
  // ...其他配置
};

// 数据库字段:user_id, user_name, created_at
const user = await app.mysql.select('SELECT * FROM users WHERE id = 1');
// 返回:{ userId: 1, userName: '张三', createdAt: '2024-01-01 12:00:00' }

这个功能对于前端开发者特别友好,避免了在代码中手动转换字段名的麻烦。

⏰ 时区问题一劳永逸

mysql2 默认会将时间转换为 UTC。插件默认配置已经解决了这个问题:

config.mysql = {
   
  default: {
   
    timezone: '+08:00',    // 设置为东八区
    dateStrings: true,     // 保持日期为字符串格式
  },
};

配置后,时间字段会保持原样返回,不再有时区困扰。

🔒 内置事务支持

处理转账、批量操作等场景时,事务是必不可少的。插件提供了简单易用的事务 API:

// 转账示例:从账户 A 转 100 元到账户 B
await app.mysql.transaction([
  "UPDATE accounts SET balance = balance - 100 WHERE user_id = 1",
  "UPDATE accounts SET balance = balance + 100 WHERE user_id = 2",
  "INSERT INTO transactions (from_user, to_user, amount) VALUES (1, 2, 100)",
]);

如果任何一条 SQL 执行失败,所有操作会自动回滚,数据安全有保障。

快速上手

安装

npm i ruoyi-eggjs-mysql --save

配置

1. 启用插件

// config/plugin.js
exports.mysql = {
   
  enable: true,
  package: "ruoyi-eggjs-mysql",
};

2. 配置数据库连接

// config/config.default.js
config.mysql = {
   
  default: {
   
    port: 3306,
    charset: "utf8mb4",
    multipleStatements: true,
    connectionLimit: 100,
    timezone: '+08:00',      // 时区设置
    dateStrings: true,       // 日期保持字符串格式
  },
  camelCase: false,          // 是否开启驼峰转换
  client: {
   
    host: "127.0.0.1",
    user: "root",
    password: "your_password",
    database: "your_database",
  },
};

实战示例

下面是一个完整的用户管理 Service 示例:

// app/service/user.js
const {
    Service } = require('egg');

class UserService extends Service {
   
  // 创建用户
  async create(name, age) {
   
    const insertId = await this.app.mysql.insert(
      `INSERT INTO users (name, age, created_at) VALUES ('${
     name}', ${
     age}, NOW())`
    );
    return insertId;
  }

  // 查询单个用户
  async findById(id) {
   
    return await this.app.mysql.select(`SELECT * FROM users WHERE id = ${
     id}`);
  }

  // 查询所有用户
  async findAll() {
   
    return await this.app.mysql.selects('SELECT * FROM users ORDER BY id DESC');
  }

  // 更新用户
  async update(id, data) {
   
    const affectedRows = await this.app.mysql.update(
      `UPDATE users SET name = '${
     data.name}', age = ${
     data.age} WHERE id = ${
     id}`
    );
    return affectedRows > 0;
  }

  // 删除用户
  async delete(id) {
   
    const deleted = await this.app.mysql.del(`DELETE FROM users WHERE id = ${
     id}`);
    return deleted > 0;
  }
}

module.exports = UserService;

多数据库支持

当项目需要连接多个数据库时(如主从分离、跨库查询),插件也能轻松应对:

// 配置多个数据库
config.mysql = {
   
  default: {
    /* 默认配置 */ },
  clients: {
   
    db1: {
   
      host: "127.0.0.1",
      database: "database1",
      // ...
    },
    db2: {
   
      host: "192.168.1.100",
      database: "database2",
      // ...
    },
  },
};

// 使用不同数据库
const db1 = app.mysql.get('db1');
const db2 = app.mysql.get('db2');

const user = await db1.select('SELECT * FROM users WHERE id = 1');
const order = await db2.select('SELECT * FROM orders WHERE user_id = 1');

安全建议

上面的示例为了简洁使用了字符串拼接,但在生产环境中强烈建议使用参数化查询来防止 SQL 注入:

const pool = app.mysql.pool;

// ✅ 推荐:参数化查询
const [users] = await pool.query('SELECT * FROM users WHERE age > ?', [18]);

// ❌ 不推荐:字符串拼接(有 SQL 注入风险)
const users = await app.mysql.selects(`SELECT * FROM users WHERE age > ${
     age}`);

总结

ruoyi-eggjs-mysql 是一个轻量但实用的 Egg.js MySQL 插件,它的优势在于:

  • 开箱即用:无需复杂配置,快速集成
  • API 简洁:封装常用操作,代码更清晰
  • 功能实用:驼峰转换、时区处理、事务支持等开发中的痛点都有解决方案
  • 性能优异:基于 mysql2 和连接池技术,性能有保障

如果你正在使用 Egg.js 开发项目,并且需要操作 MySQL 数据库,不妨试试这个插件,相信它会让你的开发效率提升不少!


目录
相关文章
|
29天前
|
XML Java 数据库连接
【RuoYi-Eggjs】:告别手写,自动生成代码
【RuoYi-Eggjs】是一款面向 Egg.js 项目的自动化代码生成工具,通过解析 MyBatis 风格的 XML Mapper 文件,智能生成标准化的 Service 层代码,彻底告别重复手写。支持实时监听、多数据库映射与内网穿透,提升开发效率与规范性。
90 7
|
存储 机器学习/深度学习 缓存
Hybrid Model Support:阿里云 Tair 联合 SGLang对 Mamba-Transformer 等混合架构模型的支持方案
阿里云 Tair KVCache 联合 SGLang,创新支持 Mamba-Transformer 等混合架构模型。通过双池内存、状态快照等技术,解决异构状态管理难题,实现前缀缓存与推测解码,显著提升 Qwen3-Next 等模型的推理效率,推动大模型迈向高效智能体时代。
|
30天前
|
NoSQL Java API
【RuoYi-SpringBoot3-Pro】:Magic API 低代码开发
RuoYi-SpringBoot3-Pro 集成 Magic API,实现低代码快速开发。通过 Web 界面编写脚本,无需编写 Controller、Service 等代码,支持实时生效、数据库操作、多数据源、权限校验与 Redis 缓存,助力高效构建 RESTful 接口,适用于原型开发、报表查询等场景。
409 0
|
2月前
|
存储 监控 前端开发
区块链 Web3 项目的开发
Web3开发聚焦链上共识与智能合约安全,涵盖架构设计、合约开发、数据索引、前端交互及审计部署。需权衡去中心化程度,选合适公链与存储方案,设计经济模型,用Solidity/Rust开发,通过The Graph、Chainlink集成数据,前端连接钱包并优化体验,经全面测试与第三方审计后,多签部署并监控运维,确保安全透明。#区块链 #web3开发
|
21天前
|
Java 程序员 微服务
【RuoYi-SpringBoot3-Pro】:热更新,设置一次,效率翻倍
【RuoYi-SpringBoot3-Pro】提升开发效率必备:热更新配置指南!告别手动重启,详解Spring Boot DevTools与JRebel插件的使用与对比,实现代码修改即时生效,大幅提升开发体验。免费+高效方案一键掌握!(239字)
122 3
【RuoYi-SpringBoot3-Pro】:热更新,设置一次,效率翻倍
|
29天前
|
人工智能 自然语言处理 安全
【RuoYi-SpringBoot3-Pro】:使用 UEditor Plus 富文本编辑器替代 quill
【RuoYi-SpringBoot3-Pro】集成UEditor Plus富文本编辑器,替代功能有限的quill。UEditor Plus界面全新,支持文档导入及AI续写、优化、生成等内容创作能力,前后端开箱即用,显著提升编辑体验与开发效率。
198 6
【RuoYi-SpringBoot3-Pro】:使用 UEditor Plus 富文本编辑器替代 quill
|
30天前
|
JavaScript 前端开发 数据安全/隐私保护
【RuoYi-SpringBoot3-Pro】:拒绝“大众脸”!高颜值前端框架选型
拒绝“若依脸”!推荐两款高颜值前端框架:BearJia Vue3(Ant Design Vue 4 + Vite)打造专业现代界面,RuoYi-Vue3-Prettier 全面重构Element Plus,支持TS与Hook封装。视觉升级、代码精简,助你轻松实现差异化后台系统。
179 1
【RuoYi-SpringBoot3-Pro】:拒绝“大众脸”!高颜值前端框架选型
|
6月前
|
SQL 人工智能 JSON
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
简介:本文整理自阿里云高级技术专家李麟在Flink Forward Asia 2025新加坡站的分享,介绍了Flink 2.1 SQL在实时数据处理与AI融合方面的关键进展,包括AI函数集成、Join优化及未来发展方向,助力构建高效实时AI管道。
959 43
|
6月前
|
SQL 人工智能 数据挖掘
Apache Flink:从实时数据分析到实时AI
Apache Flink 是实时数据处理领域的核心技术,历经十年发展,已从学术项目成长为实时计算的事实标准。它在现代数据架构中发挥着关键作用,支持实时数据分析、湖仓集成及实时 AI 应用。随着 Flink 2.0 的发布,其在流式湖仓、AI 驱动决策等方面展现出强大潜力,正推动企业迈向智能化、实时化的新阶段。
777 9
Apache Flink:从实时数据分析到实时AI
|
29天前
|
SQL XML JavaScript
【RuoYi-Eggjs】:将若依带入 Node.js 世界的企业级后台管理系统
RuoYi-Eggjs 是基于 Egg.js 的企业级后台系统,100% 复刻若依功能,支持 MyBatis XML 风格 SQL、多数据库、JWT 认证、权限控制与代码自动生成,完美对接 RuoYi-Vue3 前端,助力 Node.js 开发者高效构建管理系统。
142 5