Nestjs不使用ORM实现MySQL连接及表初始化的方法咨询
原生 MySQL 在 NestJS + TypeScript 中的实现方案(无ORM)
1. 安装必要依赖
优先使用mysql2包,比原生mysql包性能更好、原生支持Promise、自带TypeScript类型适配:
npm install mysql2 --save # 可选,缺少类型提示时安装 npm install @types/mysql2 --save-dev
2. 创建MySQL连接&初始化文件
新建src/mysql.provider.ts,完全对应你原Express代码的功能,同时修正了原SQL的语法错误(varchar补长度、加IF NOT EXISTS避免重复创建报错):
import * as mysql from 'mysql2/promise'; import { Provider } from '@nestjs/common'; // 注入标识,后续用来获取连接实例 export const MYSQL_CONNECTION = 'MYSQL_CONNECTION'; export const MysqlProvider: Provider = { provide: MYSQL_CONNECTION, useFactory: async () => { // 初始不指定database,先创建目标库 const connection = await mysql.createConnection({ host: 'localhost', user: 'user', password: 'password', }); // 初始化SQL,和你原代码逻辑一致 const initSql = ` CREATE DATABASE IF NOT EXISTS employees; USE employees; CREATE TABLE IF NOT EXISTS users ( username varchar(255) NOT NULL, email varchar(255) NOT NULL, password varchar(255) NOT NULL, createdAt datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (email) ); `; try { await connection.query(initSql); console.log('CREATED SUCCESSFULLY'); } catch (err) { console.error('库表初始化失败:', err); } return connection; }, };
3. 全局注册提供者
新建src/mysql.module.ts,全局注册后所有业务模块都可以直接注入连接实例:
import { Module, Global } from '@nestjs/common'; import { MysqlProvider } from './mysql.provider'; @Global() @Module({ providers: [MysqlProvider], exports: [MysqlProvider], }) export class MysqlModule {}
之后把MysqlModule添加到AppModule的imports数组中即可。
4. 业务中使用示例
需要操作数据库的地方直接注入连接实例即可,用法和原生query完全一致:
import { Injectable, Inject } from '@nestjs/common'; import { MYSQL_CONNECTION } from './mysql.provider'; import { Connection } from 'mysql2/promise'; @Injectable() export class UserService { constructor(@Inject(MYSQL_CONNECTION) private readonly db: Connection) {} async getAllUsers() { // 返回结果第一个元素是查询结果集 const [rows] = await this.db.query('SELECT * FROM users'); return rows; } }
额外优化提示
- 生产环境推荐用
createPool创建连接池代替单连接,性能更高,用法和单连接完全一致 - 数据库配置不要硬编码,推荐配合
@nestjs/config从环境变量读取 - 所有query操作都是异步的,必须配合
async/await使用
内容的提问来源于stack exchange,提问作者Pipi
相关产品推荐
相关产品推荐

