Nodjs编程-typeorm实体管理器

EntityManager:

        实体管理器可以对实体进行insert, update, delete, load 等操作

        const user = await entityManager.findOne(User, 1);

const entityManager = getManager(); 

或者

getConnection().manager

        实体管理器获取连接:

const connection = manager.connection;

         实体管理器获取查询运行器:

const queryRunner = manager.queryRunner;

         实体管理器开启事务:

await manager.transaction(async manager => {
})

         执行sql:

const rawData = await manager.query(`SELECT * FROM USERS`);

         实体管理器创建QueryBuilder:

const users = await manager
  .createQueryBuilder()
  .select()
  .from(User, "user")
  .where("user.name = :name", { name: "John" })
  .getMany();

        实体管理器查询实体是否定义主列:

 

if (manager.hasId(user)) {
  // ... 做一些需要的操作
}

        实体管理器获取实体主列属性值:

 

const userId = manager.getId(user); // userId === 1

        实体管理器创建新的实例:

 

const user = manager.create(User); // same as 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"; 一样

         实体管理器将多个实体合并为一个实体

const user = new User();
manager.merge(User, user, { firstName: "Timber" }, { lastName: "Saw" }); // 和user.firstName = "Timber"; user.lastName = "Saw";一样

        实体管理器preload : 

const partialUser = {
  id: 1,
  firstName: "Rizzrak",
  profile: {
    id: 1
  }
};
const user = await manager.preload(User, partialUser);

        实体管理器save:

         

await manager.save(user);
await manager.save([category1, category2, category3]);

        实体管理器remove:

await manager.remove(user);
await manager.remove([category1, category2, category3]);

         实体管理器插入或插入数据组:

await manager.insert(User, {
  firstName: "Timber",
  lastName: "Timber"
});

await manager.insert(User, [
  {
    firstName: "Foo",
    lastName: "Bar"
  },
  {
    firstName: "Rizz",
    lastName: "Rak"
  }
]);

        实体管理器更新update:

await manager.update(User, { firstName: "Timber" }, { firstName: "Rizzrak" });
// 执行 UPDATE user SET firstName = Rizzrak WHERE firstName = Timber

await manager.update(User, 1, { firstName: "Rizzrak" });
// 执行 UPDATE user SET firstName = Rizzrak WHERE id = 1

          实体管理器delete :

       

await manager.delete(User, 1);
await manager.delete(User, [1, 2, 3]);
await manager.delete(User, { firstName: "Timber" });

         count, increment, decrement, find, findAndCount, findByIds,findOne,findOneOrFail,

         getRepository()

        getCustomRepository()

        release()

         

Repository:

        作用和EntityManager一样,但操作仅限于具体实体

getRepository()

或者 

getConnection().getRepository()

或者

getManager().getRepository()

存储库和管理器find方法都接受可用于查询所需数据的特殊选项,而无需使用QueryBuilder

  find方法

        参数是{}对象:

                select属性:指定对象的属性

                relations属性:关系需要加载主体

                join属性:

                where属性:

                or运算符:

                order属性:

                skip偏移:用于分页

                take属性:limit,用于分页

                cache属性:

                lock属性:启用锁

                内置运算符:

                Not  ,LessThan ,  LessThanOrEqual, MoreThan, MoreThanOrEqual, Equal, Like,ILike, Between, In ,Any, IsNull, Raw

        存储库使用EntityManager:

  

const manager = repository.manager;

         存储库访问metadata :

const metadata = repository.metadata;

        存储库使用查询运行器:

 

const queryRunner = repository.queryRunner;

        存储库获取管理的实体目标类:

const target = repository.target;

         存储库创建查询构建器:

const users = await repository
  .createQueryBuilder("user")
  .where("user.name = :name", { name: "John" })
  .getMany();

         hasId ,getId, create,preload, save,remove,insert ,update, delete, count,increment,decrement, find,findAndCount, findByIds, findOne, findOneOrFail,Query, clear

        

自定义存储库:

   为单个实体创建存储库,并创建查询方法:

@EntityRepository(User)
export class UserRepository extends Repository<User> {
}

使用存储库:

import { getCustomRepository } from "typeorm";
import { UserRepository } from "./repository/UserRepository";

const userRepository = getCustomRepository(UserRepository); // 或connection.getCustomRepository或manager.getCustomRepository()
const user = userRepository.create(); // 和 const user = new User();一样
user.firstName = "Timber";
user.lastName = "Saw";
await userRepository.save(user);

const timber = await userRepository.findByName("Timber", "Saw");

 typeorm中EntityManager和repository什么区别? 

Repository 是一个特定于实体类的抽象层。当你定义了一个实体类后,TypeORM 会自动为你创建一个对应的 Repository。例如,如果你有一个 User 实体,那么你就会有一个 UserRepository。这个 Repository 提供了一些基本的方法来对实体进行 CRUD 操作,比如 save(), findOne(), find(), remove() 等等。 

Repository 是类型安全的,意味着它的方法是针对特定实体类型的。使用 Repository 通常更易于理解和维护,因为你不需要处理低级别的事务管理或手动管理连接。

EntityManager 则是一个更底层的概念,它提供了对整个 ORM 功能的访问,包括事务管理和更复杂的查询功能。EntityManager 可以用于任何实体,并且允许你执行跨多个实体的操作。它提供了一些额外的方法,如 createQueryBuilder(), transaction() 等。EntityManager 是非类型安全的,因为它可以用于任何实体类型。这意味着你需要显式地指定实体类型,以便正确地处理结果。

使用场景

  • Repository 适用于大多数日常开发需求,特别是当你的操作仅限于单一实体时。
  • EntityManager 更适合需要进行复杂事务管理或多实体操作的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值