TypeORM中的实体存储库:深入解析
2023-09-15 05:28:38
简介
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中的数据,并构建健壮且可维护的应用程序。
**