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


目录
相关文章
|
1月前
|
XML Java 数据库连接
【RuoYi-Eggjs】:告别手写,自动生成代码
【RuoYi-Eggjs】是一款面向 Egg.js 项目的自动化代码生成工具,通过解析 MyBatis 风格的 XML Mapper 文件,智能生成标准化的 Service 层代码,彻底告别重复手写。支持实时监听、多数据库映射与内网穿透,提升开发效率与规范性。
98 7
|
存储 机器学习/深度学习 缓存
Hybrid Model Support:阿里云 Tair 联合 SGLang对 Mamba-Transformer 等混合架构模型的支持方案
阿里云 Tair KVCache 联合 SGLang,创新支持 Mamba-Transformer 等混合架构模型。通过双池内存、状态快照等技术,解决异构状态管理难题,实现前缀缓存与推测解码,显著提升 Qwen3-Next 等模型的推理效率,推动大模型迈向高效智能体时代。
|
1月前
|
NoSQL Java API
【RuoYi-SpringBoot3-Pro】:Magic API 低代码开发
RuoYi-SpringBoot3-Pro 集成 Magic API,实现低代码快速开发。通过 Web 界面编写脚本,无需编写 Controller、Service 等代码,支持实时生效、数据库操作、多数据源、权限校验与 Redis 缓存,助力高效构建 RESTful 接口,适用于原型开发、报表查询等场景。
465 0
|
1月前
|
存储 人工智能 边缘计算
阿里云完成对ZStack进一步战略投资并实现控股
近日, 阿里云宣布完成对ZStack(云轴科技)的进一步战略投资,实现控股。双方将通过“飞天+ZStack”全栈生态,打造标准化和普惠化的云边一体整体解决方案,使得跨平台的云计算服务像安装标准软件一样简单易用,企业无论是调用远程云端大规模算力,还是在本地部署小规模算力集群,都能获得完全一致的体验 。 ZStack成立于2015年,专注于云计算基础软件,主要帮助企业构建和管理混合云以及面向AI时代的智算中心,是国家级专精特新重点“小巨人”企业。
222 0
|
1月前
|
人工智能 前端开发 Java
【RuoYi-SpringBoot3-Pro】:接入 AI 对话能力
RuoYi-SpringBoot3-Pro 内置 OpenAI 工具类,支持同步/流式对话、多角色消息与代理配置,兼容 OpenAI 及第三方 API,开箱即用,助力开发者快速集成 AI 聊天功能。
194 0
|
1月前
|
监控 NoSQL 安全
【RuoYi-Eggjs】:基于 Bull Queue 的企业级定时任务调度系统
【RuoYi-Eggjs】基于 Bull Queue 与 Redis 实现企业级定时任务调度系统,支持动态管理、分布式执行、失败重试、日志监控及手动触发。集成 Cron 表达式解析、任务安全校验与执行统计,适用于数据同步、报表生成等场景,助力高可用任务调度。项目开源,易于扩展。
61 3
|
1月前
|
弹性计算 人工智能 小程序
阿里云服务器多少钱一年?2026年最新曝光,包括轻量、ECS和GPU云服务器价格清单
阿里云2026年服务器价格揭晓:轻量应用服务器低至¥38/年,ECS云服务器新购续费同价,GPU服务器支持大模型训练。涵盖个人建站、企业应用与AI计算,三类机型全解析,助你选型不花冤枉钱。
232 3
|
1月前
|
SQL JavaScript Java
【RuoYi-Eggjs】:把 MyBatis 带到 Node.js
【RuoYi-Eggjs-MyBatis】将MyBatis优雅引入Node.js,告别SQL字符串拼接。支持XML管理SQL、动态标签、预编译防注入,修改即生效,无需重启。适合Java转Node开发者,提升代码清晰度与安全性,助力Egg.js项目高效开发。GitHub开源,欢迎Star!
66 1
|
1月前
|
安全 Java Maven
【RuoYi-SpringBoot3-Pro】:ClassFinal 代码加密
本文介绍RuoYi-SpringBoot3-Pro如何集成ClassFinal实现Java代码加密,保护核心业务逻辑。通过Maven插件对class文件与配置文件进行AES加密,防止反编译泄露,支持选择性加密、密码验证与机器码绑定,适用于商业交付、私有化部署等场景,保障知识产权安全。
309 5
|
2月前
|
传感器 存储 人工智能
AI智能体:实现AGI的关键一步与未来展望
AI智能体是能自主感知、决策与行动的“数字大脑”,它让AI从只会回答问题进化为能动手解决问题。相比传统工具,它具备自主性、反应性、前瞻性、交互性和迭代性,可像助手一样主动完成复杂任务。如今已在政务、医疗、教育、金融等领域落地,成为提升效率的“数字员工”。2025年被视为“AI智能体元年”,技术、资本与政策合力推动其迈向规模化应用,开启人机协同新阶段。
852 4

热门文章

最新文章