【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 数据库,不妨试试这个插件,相信它会让你的开发效率提升不少!


目录
相关文章
|
3月前
|
XML Java 数据库连接
【RuoYi-Eggjs】:告别手写,自动生成代码
【RuoYi-Eggjs】是一款面向 Egg.js 项目的自动化代码生成工具,通过解析 MyBatis 风格的 XML Mapper 文件,智能生成标准化的 Service 层代码,彻底告别重复手写。支持实时监听、多数据库映射与内网穿透,提升开发效率与规范性。
186 7
|
3月前
|
人工智能 专有云 索引
Qwen3-Pro重磅发布!基于阿里云APG服务器的专属优化模型,性能翻倍
近日,阿里云专有云团队联合通义实验室推出针对阿里云APG服务器的专属优化模型Qwen3-Pro:对比Qwen3-VL-235B(开源版)模型效果持平、性能翻倍
429 0
|
3月前
|
人工智能 开发框架 JSON
【RuoYi-SpringBoot3-Pro】:AI 能力再扩展,一个方法打通 n8n 工作流
RuoYi-SpringBoot3-Pro 集成 n8n,通过一个 Webhook 方法实现 AI 能力扩展。Java 端轻量触发,复杂 AI 工作流由 n8n 可视化编排,支持文本处理、文件上传等场景,灵活高效,助力企业级应用快速集成自动化能力。
257 5
|
3月前
|
人工智能 自然语言处理 安全
【RuoYi-SpringBoot3-Pro】:使用 UEditor Plus 富文本编辑器替代 quill
【RuoYi-SpringBoot3-Pro】集成UEditor Plus富文本编辑器,替代功能有限的quill。UEditor Plus界面全新,支持文档导入及AI续写、优化、生成等内容创作能力,前后端开箱即用,显著提升编辑体验与开发效率。
348 6
【RuoYi-SpringBoot3-Pro】:使用 UEditor Plus 富文本编辑器替代 quill
|
3月前
|
人工智能 安全 前端开发
【RuoYi-SpringBoot3-Pro】: 三级等保安全配置-基于短信验证码的二次验证方案
RuoYi-SpringBoot3-Pro 推出三级等保安全增强方案,新增基于短信验证码的二次验证功能。支持阿里云短信服务,前后端及移动端均可通过配置快速启用,提升系统安全性。项目开源,欢迎Star支持!
162 3
【RuoYi-SpringBoot3-Pro】: 三级等保安全配置-基于短信验证码的二次验证方案
|
存储 机器学习/深度学习 缓存
Hybrid Model Support:阿里云 Tair 联合 SGLang对 Mamba-Transformer 等混合架构模型的支持方案
阿里云 Tair KVCache 联合 SGLang,创新支持 Mamba-Transformer 等混合架构模型。通过双池内存、状态快照等技术,解决异构状态管理难题,实现前缀缓存与推测解码,显著提升 Qwen3-Next 等模型的推理效率,推动大模型迈向高效智能体时代。
|
3月前
|
SQL 人工智能 Java
【RuoYi-SpringBoot3-Pro】:多租户功能上手指南
RuoYi-SpringBoot3-Pro集成MyBatis-Plus多租户插件,自动注入tenant_id过滤条件,实现数据隔离。通过简单配置即可开启多租户,支持系统表免隔离、超级管理员跨租户查看,提升SaaS开发效率。结合AI建表工具,快速完成数据库初始化。
327 7
|
3月前
|
NoSQL Java API
【RuoYi-SpringBoot3-Pro】:Magic API 低代码开发
RuoYi-SpringBoot3-Pro 集成 Magic API,实现低代码快速开发。通过 Web 界面编写脚本,无需编写 Controller、Service 等代码,支持实时生效、数据库操作、多数据源、权限校验与 Redis 缓存,助力高效构建 RESTful 接口,适用于原型开发、报表查询等场景。
784 0
|
3月前
|
移动开发 小程序 JavaScript
【RuoYi-SpringBoot3-UniApp】:一套代码,多端运行的移动端开发方案
RuoYi-SpringBoot3-UniApp 是基于 Vue3 与 UniApp 的跨平台移动端解决方案,支持一套代码编译到小程序、App、H5 和桌面端。集成 Pinia 状态管理、JWT 认证、权限路由、z-paging 分页、mp-html 富文本等主流功能,开箱即用,显著降低多端开发与维护成本,助力高效构建企业级应用。
479 6
|
3月前
|
SQL XML JavaScript
【RuoYi-Eggjs】:将若依带入 Node.js 世界的企业级后台管理系统
RuoYi-Eggjs 是基于 Egg.js 的企业级后台系统,100% 复刻若依功能,支持 MyBatis XML 风格 SQL、多数据库、JWT 认证、权限控制与代码自动生成,完美对接 RuoYi-Vue3 前端,助力 Node.js 开发者高效构建管理系统。
273 5