有勇气的牛排博客

Typescript Express 框架 06 MySQL集成

有勇气的牛排 325 TypeScript 2024-12-02 22:17:34

1 前言

mysql2 是一个用于 Node.js 的 MySQL 客户端库,它提供了更快、更灵活的 MySQL 连接和查询功能。mysql2mysql 库的升级版,保持了与 mysql 库的兼容性,并且提供了更多的特性和更好的性能。它是为了改善 mysql 模块的性能和错误处理而创建的,同时为开发者提供了更多的 API 选择。

1.1 特性与优势

  1. 性能改进
    • mysql2 使用了更高效的二进制协议,支持更高效的查询和数据传输。
    • 由于采用了优化的 C++ 代码,mysql2 在执行某些操作时比 mysql 更快。
  2. Promise 支持
    • mysql2 支持 Promise API,这使得它与现代 JavaScript 的 async/await 风格兼容。你可以使用 async/await 来处理异步操作,代码更加简洁易读。
  3. 预处理语句
    • 支持预处理语句(Prepared Statements),可以防止 SQL 注入攻击,并提升性能,尤其是执行多次相同查询时。
  4. 支持 MySQL 和 MariaDB
    • mysql2 不仅支持 MySQL 服务器,也支持 MariaDB,因此对于两者都能兼容工作。
  5. 支持连接池
    • mysql2 提供了连接池功能,可以有效管理连接,避免创建新连接时的性能开销,适用于高并发应用。
  6. 流式查询(Streaming Queries)
    • mysql2 支持流式查询,可以在获取大量数据时提高性能,尤其是需要处理大量结果集的情况。
  7. 完整的字符集支持
    • 支持多种字符集和排序规则,可以处理不同语言的数据。

2 安装

npm install mysql2

3 数据库

image.png

4 实例化配置

import mysql from 'mysql2/promise'; // 创建 MySQL 数据库连接池 const pool = mysql.createPool({ host: '127.0.0.1', // MySQL 服务器地址 user: 'root', // 数据库用户名 password: 'root',// 数据库密码 database: 'cs_template', // 数据库名称 waitForConnections: true, connectionLimit: 10, queueLimit: 0, }); export default pool;

5 增删改查

5.1 单条数据查询

src/controller/MySqlController.ts

import { Request, Response } from 'express'; import { Route } from '../utils/route.decorator'; import ResponseUtil from "../utils/ResponseUtil"; import pool from '../db_client/mysql'; export class MySqlController { // 根据id查询公告 // http://127.0.0.1:3000/api/v1//getNoticeById/1 @Route('get', '/getNoticeById/:id') async getNoticeById(req: Request, res: Response) { const { id } = req.params; try { const sql = 'SELECT * FROM notice WHERE n_id = ?'; const [ rows ] = await pool.execute(sql, [ id ]); res.json({ message: '查询成功', user: rows }); } catch (err) { console.error('查询用户数据失败:', err); res.status(500).json({ message: '服务器错误' }); } } }

image.png

5.2 批量查询

// 查询所有公告 // http://127.0.0.1:3000/api/v1/findNoticeAll @Route('get', '/findNoticeAll') async mysqlTest(req: Request, res: Response) { const user_id = 1; let data = {}; try { const sql = 'SELECT * FROM notice'; const [ rows ] = await pool.execute(sql); res.json({ message: '查询成功', users: rows }); } catch (err) { console.error('查询所有用户失败:', err); res.status(500).json({ message: '服务器错误' }); } }

image.png

5.3 插入数据

const sql = 'INSERT INTO users (name, age) VALUES (?, ?)'; const [result] = await pool.execute(sql, [name, age]);

5.4 更新数据

// 使用 UPDATE SQL 语句更新用户数据 const sql = 'UPDATE users SET name = ?, age = ? WHERE id = ?'; const [result] = await pool.execute(sql, [name, age, id]);

留言

专栏
文章
加入群聊