返回

TypeORM中的实体存储库:深入解析

前端

简介

TypeORM是一个出色的对象关系映射框架(ORM),它允许开发人员使用JavaScript在关系数据库中轻松操作对象。实体存储库是TypeORM的关键概念,它提供了一套丰富的API来管理特定实体,简化了数据持久化和检索的过程。在这篇文章中,我们将深入探讨TypeORM中的实体存储库,包括EntityManager和Repository,以及它们的常用API。

EntityManager:统筹全局

EntityManager是一个全局对象,可用于管理整个应用程序中的所有实体。它提供了用于创建、更新、删除和检索实体的通用方法,并支持事务管理和批量操作。以下是EntityManager的一些关键API:

  • create(entity):创建一个新的实体对象。
  • find(entityClass, id):根据ID查找单个实体。
  • findAll(entityClass):查找所有属于特定实体类的实体。
  • save(entity):将实体保存到数据库中(插入或更新)。
  • remove(entity):从数据库中删除实体。
  • beginTransaction():启动事务。
  • commit():提交事务。
  • rollback():回滚事务。

Repository:实体管理的指定接口

Repository是特定于实体的接口,它提供了专门针对给定实体类的一组API。Repository可以更方便地操作特定类型的实体,并允许开发人员定义自定义查询和操作。以下是Repository的一些关键API:

  • findOne(id):根据ID查找单个实体。
  • findAll():查找所有属于该实体类的实体。
  • findAndCount():查找所有属于该实体类的实体,并返回总数。
  • save(entity):将实体保存到数据库中(插入或更新)。
  • remove(entity):从数据库中删除实体。
  • createQueryBuilder():创建用于复杂查询的查询构建器。
  • metadata:提供有关该实体类的元数据。

常用API

findOne

findOne方法用于根据主键ID查找单个实体。它返回一个Promise对象,该对象在实体找到时解析为实体对象,在找不到实体时解析为null。

const user = await userRepository.findOne(1);

findAll

findAll方法用于查找所有属于特定实体类的实体。它返回一个Promise对象,该对象解析为一个包含所有找到的实体的数组。

const users = await userRepository.findAll();

save

save方法用于将实体保存到数据库中。它返回一个Promise对象,该对象解析为保存后的实体对象。

const user = new User();
user.name = 'John Doe';
await userRepository.save(user);

remove

remove方法用于从数据库中删除实体。它返回一个Promise对象,该对象在实体成功删除后解析为已删除的实体对象。

await userRepository.remove(user);

QueryBuilder

QueryBuilder是一个强大的工具,允许开发人员创建复杂查询。它提供了用于构建复杂查询的链式API,包括连接、过滤、排序和分组。

const queryBuilder = userRepository.createQueryBuilder('user');
queryBuilder
  .where('user.name = :name', { name: 'John Doe' })
  .orderBy('user.id', 'DESC')
  .limit(10);

const users = await queryBuilder.getMany();

结论

TypeORM中的实体存储库是管理实体并与数据库交互的强大工具。EntityManager提供了一组全局API,而Repository提供了专门针对特定实体类的一组API。通过理解和利用这些API,开发人员可以有效地操作TypeORM中的数据,并构建健壮且可维护的应用程序。

**