cool 中的Midway ----node.js的TypeORM的使用

1.介绍

TypeORM | Midway

TypeORMnode.js 现有社区最成熟的对象关系映射器(ORM )。本文介绍如何在 Midway 中使用 TypeORM

相关信息:

描述
可用于标准项目
可用于 Serverless
可用于一体化
包含独立主框架
包含独立日志

和老写法的区别

旧模块为 @midwayjs/orm ,新模块为 @midwayjs/typeorm,区别如下:

  • 1、包名不同
  • 2、在 src/config.default 的部分配置调整
    • 2.1 配置文件中的 key 不同 (orm => typeorm)
    • 2.2修改为数据源的形式 typeorm.dataSource
    • 2.3 实体模型类或者实体模型类的路径,需要在数据源的 entities 字段中声明
    • 2.4 Subscriber 需要在数据源的 subscribers 字段中声明
  • 3、不再使用 EntityModel 装饰器,直接使用 typeorm 提供的能力

2.安装

安装 typeorm 组件,提供数据库 ORM 能力。

复制代码
npm i @midwayjs/typeorm@3 typeorm --save

或者在 package.json 中增加如下依赖后,重新安装。

复制代码
{
  "dependencies": {
    "@midwayjs/typeorm": "^3.0.0",
    "typeorm": "~0.3.0",
    // ...
  },
  "devDependencies": {
    // ...
  }
}

3.事务介绍和使用

我用到了这个的数据库事务操作 介绍一下事务的使用

官网是这样写的

复制代码
 const dataSource = this.dataSourceManager.getDataSource('default');

    // start transaction
    await dataSource.transaction(async (transactionalEntityManager) => {
      // run code
      await transactionalEntityManager.save(UserDTO, user); // 操作代码逻辑
    });

相当于套了一层这个 transaction 函数 其实里面的逻辑也可以直接书写 因为是接口 所以 我们能明白的是 这个 就上事务 就是会阻塞其他操作代码

复制代码
async testList() {
    const dataSource = this.dataSourceManager.getDataSource('default');

    // start transaction
    return await dataSource.transaction(async transactionalEntityManager => {
      // run code
      const res = await this.businessOrderEntity.findOneBy({
        id: 1,
      });
      res.orderProgress += 10;
      await transactionalEntityManager.save(res);
      return res.orderProgress;
    });
  }

这是我的测试代码 将数据表的操作写成一个接口

利用高并发的情况下 调用100次 看看这个 orderProgress += 10 以后经过一百次是否正确 就可以验证这个事务函数的成功与失败

相关推荐
用户68545375977694 分钟前
同步成本换并行度:多线程、协程、分片、MapReduce 怎么选才不踩坑
后端
javaTodo11 分钟前
Claude Code 记忆机制详解:从 CLAUDE.md 到 Auto Memory,六层体系全拆解
后端
LSTM9732 分钟前
使用 C# 和 Spire.PDF 从 HTML 模板生成 PDF 的实用指南
后端
JaguarJack44 分钟前
为什么 PHP 闭包要加 static?
后端·php·服务端
BingoGo1 小时前
为什么 PHP 闭包要加 static?
后端
是糖糖啊1 小时前
OpenClaw 从零到一实战指南(飞书接入)
前端·人工智能·后端
百度Geek说1 小时前
基于Spark的配置化离线反作弊系统
后端
Java编程爱好者2 小时前
虚拟线程深度解析:轻量并发编程的未来趋势
后端
苏三说技术2 小时前
Spring AI 和 LangChain4j ,哪个更好?
后端