본문 바로가기
프로그래밍/TypeORM

[TypeORM] EntityManager API

by YuminK 2023. 9. 2.

https://orkhan.gitbook.io/typeorm/docs/entity-manager-api

 

dataSource - EntityManager에 의해 사용된다.

const dataSource = manager.dataSource

 

queryRunner - EntityManager에 의해 사용된다. EntityManager의 트랜잭션 인스턴스에서만 사용된다.

const queryRunner = manager.queryRunner

 

transaction - 많은 데이터베이스 요청이 처리되는 곳에 트랜잭션을 제공한다. 
await manager.transaction(async (manager) => {
    // NOTE: you must perform all database operations using the given manager instance
    // it's a special instance of EntityManager working with this transaction
    // and don't forget to await things here
})

 

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)) {
    // ... do something
}

 

getId - 주어진 엔티티의 주요키 칼럼을 값을 얻는다. 합성된(Composite) 주요키를 가진 경우,

주요키 칼럼에 대한 object를 반환한다.

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

 

create - User의 새 인스턴스를 생성한다.

추가적으로 유저 속성을 가진 오브젝트를 받아들인다. (새로 생성하는 데 사용된다.)
const user = manager.create(User) // same as const user = new User();
const user = manager.create(User, {
    id: 1,
    firstName: "Timber",
    lastName: "Saw",
}) // same as const user = new User(); user.firstName = "Timber"; user.lastName = "Saw";

 

merge - 다양한 엔티티를 하나의 엔티티로 합성한다.

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

 

preload - 새로운 엔티티를 기존 엔티티를 통해 만든다. 이미 데이터베이스에 존재하는 값이라면 데이터를 로드하고 모든 값을 교체한다. 그리고 entity 값을 반환한다. 새 엔티티는 사실상 데이터베이스에서 로드된 값이나 새로운 오브젝트가 갖던 속성으로 변경되어 있다.

const partialUser = {
    id: 1,
    firstName: "Rizzrak",
    profile: {
        id: 1,
    },
}
const user = await manager.preload(User, partialUser)
// user will contain all missing data from partialUser with partialUser property values:
// { 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 - 엔티티 옵션이나 주어진 옵션값을 사용하여 엔티티를 부분적으로 업데이트한다.

await manager.update(User, { age: 18 }, { category: "ADULT" })
// executes UPDATE user SET category = ADULT WHERE age = 18

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

 

upsert - 이미 존재하지 않는 경우, 새로운 엔티티 혹은 엔티티 배열을 추가한다. 아니라면 업데이트한다.  

(Supported by AuroraDataApi, Cockroach, Mysql, Postgres, and Sqlite database drivers.)

 

await manager.upsert(
    User,
    [
        { externalId: "abc123", firstName: "Rizzrak" },
        { externalId: "bca321", firstName: "Karzzir" },
    ],
    ["externalId"],
)
/** executes
 *  INSERT INTO user
 *  VALUES
 *      (externalId = abc123, firstName = Rizzrak),
 *      (externalId = cba321, firstName = Karzzir),
 *  ON CONFLICT (externalId) DO UPDATE firstName = EXCLUDED.firstName
 **/

 

delete - 엔티티를 이름, ids 또는 주어진 값을 사용하여 삭제한다.

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

 

increment - 제공된 옵션을 통해 정해진 entity의 칼럼을 증가시킨다.

decrement - 제공된 옵션을 통해 정해진 entity의 칼럼을 감소시킨다.

 

await manager.increment(User, { firstName: "Timber" }, "age", 3)

await manager.decrement(User, { firstName: "Timber" }, "age", 3)

 

count - 매칭되는 FindOptions에 맞는 엔티티의 수를 센다. (Useful for pagination)

const count = await manager.count(User, {
    where: {
        firstName: "Timber",
    },
})

 

countBy - 매칭되는 FindWhereOptions에 따라 엔티티의 수를 센다. (Useful for pagination)

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에 맞는 엔티티를 찾는다. 또한 개수를 센다. 

pagination 설정인 form과 take는 무시된다.

const [timbers, timbersCount] = await manager.findAndCount(User, {
    where: {
        firstName: "Timber",
    },
})

 

findAndCountBy - 매칭되는 FindWhereOptions에 맞는 엔티티를 찾는다. 또한 개수를 센다. 

pagination 설정인 form과 take는 무시된다.

const [timbers, timbersCount] = await manager.findAndCount(User, {
    firstName: "Timber",
})

 

findOne - 매칭되는 FindOption에 맞는 첫 엔티티를 반환한다.

const timber = await manager.findOne(User, {
    where: {
        firstName: "Timber",
    },
})

 

findOneBy - 매칭되는 FindOptionsWhere에 맞는 첫 엔티티를 반환한다.

const timber = await manager.findOneBy(User, { firstName: "Timber" })

 

findOneOrFail - id나 find Options에 맞는 첫 엔티티를 찾아온다. 정보를 찾을 수 없는 경우 반환된 promise를 거부한다. 

const timber = await manager.findOneOrFail(User, {
    where: {
        firstName: "Timber",
    },
})

 

findOneByOrFail  - 주어진 FindOptions에 맞는 첫 엔티티를 찾는다. 정보를 찾을 수 없는 경우 반환된 promise를 거부한다.

const timber = await manager.findOneByOrFail(User, { firstName: "Timber" })

 

clear - 주어진 테이블에서 모든 데이터를 날린다. 

await manager.clear(User)

 

getRepository - 구체적인 엔티티를 처리하기 위해 Repository를 얻는다. 
const userRepository = manager.getRepository(User)

 

getTreeRepository - Tree Repository를 얻는다.

const categoryRepository = manager.getTreeRepository(Category)

 

getMongoRepository - Mongo Repository를 얻는다.

const userRepository = manager.getMongoRepository(User)

 

withRepository - custom Repository를 얻는다. 

const myUserRepository = manager.withRepository(UserRepository)

 

release - entityManger의 쿼리 러너를 release한다. 쿼리러너가 생성되었고 따로 관리하는 경우에만 사용한다.

댓글