You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用NodeJS + TypeORM调用MySQL存储过程?

NodeJS + TypeORM 调用MySQL存储过程实现指南

准备工作

  • 安装必备依赖:
    npm install typeorm mysql2 reflect-metadata
    
  • 配置TypeORM数据源(示例:data-source.ts):
    import { DataSource } from "typeorm";
    
    export const AppDataSource = new DataSource({
      type: "mysql",
      host: "localhost",
      port: 3306,
      username: "your_db_user",
      password: "your_db_password",
      database: "your_database",
      synchronize: false,
      logging: false,
      entities: ["src/entities/**/*.ts"],
      migrations: ["src/migrations/**/*.ts"],
      subscribers: ["src/subscribers/**/*.ts"],
    });
    
  • 初始化数据源:
    await AppDataSource.initialize();
    

调用存储过程的常见场景

1. 无参数、无返回结果的存储过程

直接使用query方法执行CALL语句:

// 调用无参存储过程
await AppDataSource.query("CALL clean_expired_data()");

2. 带参数、无返回结果的存储过程

通过占位符?传递参数,第二个参数为参数数组:

// 调用带参数的存储过程(例:插入操作日志)
await AppDataSource.query("CALL insert_operation_log(?, ?, ?)", [
  "admin",
  "delete",
  new Date()
]);

3. 返回单个结果集的存储过程

query方法会返回结果数组,直接解构或遍历即可:

// 调用返回用户列表的存储过程(例:获取指定角色的用户)
const [userList] = await AppDataSource.query("CALL get_users_by_role(?)", ["editor"]);
console.log(userList); // 输出用户对象数组

4. 返回多个结果集的存储过程

存储过程返回多结果集时,query会返回一个包含多个数组的嵌套数组,每个子数组对应一个结果集:

// 调用返回多结果的存储过程
const [userData, orderData] = await AppDataSource.query("CALL get_user_with_orders(?)", [1]);
console.log("用户信息:", userData);
console.log("用户订单:", orderData);

5. 使用EntityManager调用

如果习惯用EntityManager操作,同样支持query方法:

const entityManager = AppDataSource.manager;
const result = await entityManager.query("CALL get_user_count()");
console.log("用户总数:", result[0][0].count);

注意事项

  • 确保MySQL中已正确创建目标存储过程,且数据库用户拥有执行权限
  • 参数类型需与存储过程定义匹配(如日期类型直接传入Date对象即可,TypeORM会自动处理转换)
  • 若项目使用TypeORM的实体映射,无需为存储过程返回结果创建实体,直接处理原始数据即可
  • 应用关闭时记得销毁数据源连接:
    await AppDataSource.destroy();
    

内容的提问来源于stack exchange,提问作者Lucas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 15:01:04