跳转到主要内容

EntityManager API

  • dataSource - EntityManager使用的数据源。
const dataSource = manager.dataSource;
  • queryRunner - EntityManager使用的查询运行器。 仅在事务性的EntityManager实例中使用。
const queryRunner = manager.queryRunner;
  • transaction - 提供一个事务,其中多个数据库请求将在单个数据库事务中执行。 了解更多事务
await manager.transaction(async (manager) => {
// 注意:您必须使用给定的manager实例执行所有数据库操作
// 它是一个专门用于此事务的EntityManager实例
// 不要忘记在这里等待异步操作
});
  • query - 执行原始的SQL查询。
const rawData = await manager.query(`SELECT * FROM USERS`);
  • createQueryBuilder - 创建一个查询构建器,用于构建SQL查询。 了解更多关于QueryBuilder
const users = await manager
.createQueryBuilder()
.select()
.from(User, "user")
.where("user.name = :name", { name: "John" })
.getMany();
  • hasId - 检查给定的实体是否具有已定义的主键列属性。
if (manager.hasId(user)) {
// ... 做一些操作
}
  • getId - 获取给定实体的主键列属性值。 如果实体具有复合主键,则返回的值将是包含主键列名称和值的对象。
const userId = manager.getId(user); // userId === 1
  • create - 创建User的新实例。可以选择使用属性对象文字创建要写入新创建的用户对象的属性。
const user = manager.create(User); // 相当于 const user = new User();
const user = manager.create(User, {
id: 1,
firstName: "Timber",
lastName: "Saw",
}); // 相当于 const user = new User(); user.firstName = "Timber"; user.lastName = "Saw";
  • merge -合并多个实体为一个实体。
const user = new User();
manager.merge(User, user, { firstName: "Timber" }, { lastName: "Saw" }); // 相当于 user.firstName = "Timber"; user.lastName = "Saw";
  • preload - 从给定的普通JavaScript对象创建一个新实体。如果实体已经存在于数据库中,则加载它(以及与之相关的所有内容), 用新对象中的所有值替换它的值,并返回新实体。新实体实际上是从数据库实体加载的,所有属性都用新对象替换了。
const partialUser = {
id: 1,
firstName: "Rizzrak",
profile: {
id: 1,
},
};
const user = await manager.preload(User, partialUser);
// user将包含从partialUser中缺失的所有数据,带有partialUser属性值:
// { id: 1, firstName: "Rizzrak", lastName: "Saw", profile: { id: 1, ... } }
  • save - 保存给定的实体或实体数组。 如果实体已存在于数据库中,则进行更新。 如果实体尚不存在于数据库中,则进行插入。 它在单个事务中保存所有给定的实体(如果实体管理器不是事务性的)。 还支持部分更新,因为所有未定义的属性都会被跳过。为了将值设置为NULL,您必须手动将属性设置为null
await manager.save(user);
await manager.save([category1, category2, category3]);
  • remove - 删除给定的实体或实体数组。 它在单个事务中删除所有给定的实体(如果实体管理器不是事务性的)。
await manager.remove(user);
await manager.remove([category1, category2, category3]);
  • insert - 插入新的实体或实体数组。
await manager.insert(User, {
firstName: "Timber",
lastName: "Timber",
});

await manager.insert(User, [
{
firstName: "Foo",
lastName: "Bar",
},
{
firstName: "Rizz",
lastName: "Rak",
},
]);
  • update - 根据给定的更新选项或实体ID部分更新实体。
await manager.update(User, { age: 18 }, { category: "ADULT" })
// 执行 UPDATE user SET category = ADULT WHERE age = 18

await manager.update(User, 1, { firstName: "Rizzrak" })
// 执行 UPDATE user SET firstName = Rizzrak WHERE id = 1
  • upsert - 插入新实体或实体数组,除非它们已经存在,否则将更新它们。AuroraDataApi、Cockroach、Mysql、Postgres和Sqlite数据库驱动程序支持此功能。
await manager.upsert(
User,
[
{ externalId: "abc123", firstName: "Rizzrak" },
{ externalId: "bca321", firstName: "Karzzir" },
],
["externalId"],
)
/** 执行
* INSERT INTO user
* VALUES
* (externalId = abc123, firstName = Rizzrak),
* (externalId = cba321, firstName = Karzzir),
* ON CONFLICT (externalId) DO UPDATE firstName = EXCLUDED.firstName
**/
  • delete - 根据实体ID、ID或给定的条件删除实体:
await manager.delete(User, 1)
await manager.delete(User, [1, 2, 3])
await manager.delete(User, { firstName: "Timber" })
  • increment - 将满足给定选项的实体的某些列增加提供的值。
await manager.increment(User, { firstName: "Timber" }, "age", 3)
  • decrement - 将满足给定选项的实体的某些列减去提供的值。
await manager.decrement(User, { firstName: "Timber" }, "age", 3)
  • count - 计算与FindOptions匹配的实体的数量。对于分页很有用。
const count = await manager.count(User, {
where: {
firstName: "Timber",
},
})
  • countBy - 计算与FindWhereOptions匹配的实体的数量。对于分页很有用。
const count = await manager.countBy(User, { firstName: "Timber" })
  • find - 查找与给定的FindOptions匹配的实体。
const timbers = await manager.find(User, {
where: {
firstName: "Timber",
},
})
  • findBy - 查找与给定的FindWhereOptions匹配的实体。
const timbers = await manager.findBy(User, {
firstName: "Timber",
})
  • findAndCount - 查找与给定的FindOptions匹配的实体。 同时计算满足给定条件的所有实体的数量, 但忽略分页设置(from 和 take 选项)。
const [timbers, timbersCount] = await manager.findAndCount(User, {
where: {
firstName: "Timber",
},
})
- `findAndCountBy` - 查找与给定的`FindOptionsWhere`匹配的实体。
同时计算满足给定条件的所有实体的数量,
但忽略分页设置(from 和 take 选项)。

```typescript
const [timbers, timbersCount] = await manager.findAndCountBy(User, {
firstName: "Timber",
})
  • findOne - 查找与给定的FindOptions匹配的第一个实体。
const timber = await manager.findOne(User, {
where: {
firstName: "Timber",
},
})
  • findOneBy - 查找与给定的FindOptionsWhere匹配的第一个实体。
const timber = await manager.findOneBy(User, { firstName: "Timber" })
  • findOneOrFail - 查找与给定的FindOptions匹配的第一个实体。 如果没有匹配的实体,则拒绝返回的 Promise。
const timber = await manager.findOneOrFail(User, {
where: {
firstName: "Timber",
},
})
  • findOneByOrFail - 查找与给定的FindOptionsWhere匹配的第一个实体。 如果没有匹配的实体,则拒绝返回的 Promise。
const timber = await manager.findOneByOrFail(User, { firstName: "Timber" })
  • clear - 清除给定表中的所有数据(截断/删除)。
await manager.clear(User)
  • getRepository - 获取用于在特定实体上执行操作的Repository。 了解更多关于Repositories
const userRepository = manager.getRepository(User)
  • getTreeRepository - 获取用于在特定实体上执行操作的TreeRepository。 了解更多关于Repositories
const categoryRepository = manager.getTreeRepository(Category)
  • getMongoRepository - 获取用于在特定实体上执行操作的MongoRepository。 了解更多关于MongoDB
const userRepository = manager.getMongoRepository(User)
  • withRepository - 获取在事务中使用的自定义仓库实例。 了解更多关于自定义仓库
const myUserRepository = manager.withRepository(UserRepository)
  • release - 释放实体管理器的查询运行器。 仅在手动创建和管理查询运行器时使用。
await manager.release()