typeorm:getRepository() 和 getConnection() 有什么区别?

Kid*_*g_C 5 typescript typeorm

https://typeorm.io/#/select-query-builder/how-to-create-and-use-a-querybuilder

创建查询生成器的方法有多种:

使用连接:

import {getConnection} from "typeorm";

const user = await getConnection()
    .createQueryBuilder()
    .select("user")
    .from(User, "user")
    .where("user.id = :id", { id: 1 })
    .getOne();
Run Code Online (Sandbox Code Playgroud)

使用实体管理器:

import {getManager} from "typeorm";

const user = await getManager()
    .createQueryBuilder(User, "user")
    .where("user.id = :id", { id: 1 })
    .getOne();
Run Code Online (Sandbox Code Playgroud)

使用存储库:

import {getRepository} from "typeorm";

const user = await getRepository(User)
    .createQueryBuilder("user")
    .where("user.id = :id", { id: 1 })
    .getOne();
Run Code Online (Sandbox Code Playgroud)

该文档从未解释这些方法之间的区别。每种方法什么时候使用?

sli*_*wp2 1

看一下源码:

getConnection()

/**
 * Gets connection from the connection manager.
 * If connection name wasn't specified, then "default" connection will be retrieved.
 *
 * @deprecated
 */
export function getConnection(connectionName: string = "default"): DataSource {
    return getConnectionManager().get(connectionName)
}
Run Code Online (Sandbox Code Playgroud)

getRepository()

/**
 * Gets repository for the given entity class.
 *
 * @deprecated
 */
export function getRepository<Entity extends ObjectLiteral>(
    entityClass: EntityTarget<Entity>,
    connectionName: string = "default",
): Repository<Entity> {
    return getConnectionManager()
        .get(connectionName)
        .getRepository<Entity>(entityClass)
}
Run Code Online (Sandbox Code Playgroud)

getManager()

/**
 * Gets entity manager from the connection.
 * If connection name wasn't specified, then "default" connection will be retrieved.
 *
 * @deprecated
 */
export function getManager(connectionName: string = "default"): EntityManager {
    return getConnectionManager().get(connectionName).manager
}
Run Code Online (Sandbox Code Playgroud)

getConnection()返回 a DataSourcegetRepository()返回 aRepositorygetManager()返回 a EntityManager。它们都有该createQueryBuilder()方法,请参阅Repository.ts#L77DataSource.ts#L555EntityManager.ts#L194

那么它们之间的区别是: