카테고리 없음

TYPE ORM

namu445 2022. 5. 26. 21:06
  • TYPE Script, Java Script에서 사용할 수 있는 ORM(Object Relational Mapping)입니다.
  • Entity를 정의하고 데이터 베이스에 접근할 수 있는 메소드를 제공합니다.
  • Active Record, Data Mapper를 지원합니다.
  • mySQL과 mongoDB를 지원합니다. SQL DB는 대부분 호환이 가능할 듯 합니다. 저는 Nestjs에서 MySQL과 사용했습니다.

Active Record

  • 모델을 사용해서 데이터 베이스에 접근하는 방법입니다.
  • BaseEntity를 이용해서 Entity 클래스를 만들고 사용할 수 있습니다.(Nestjs의 Docs는 Data Mapper가 예시로 나옵니다.)
  • BaseEntity에는 save,remove,find,findOne 같은 메소드를 제공한다.
//entity 생성
import { BaseEntity, Entity, PrimaryGeneratedColumn, Column } from "typeorm"

@Entity()
export class User extends BaseEntity {
    @PrimaryGeneratedColumn()
    id: number

    @Column()
    firstName: string

    @Column()
    lastName: string

    @Column()
    isActive: boolean
}

 

// example how to save AR entity
const user = new User()
user.firstName = "Timber"
user.lastName = "Saw"
user.isActive = true
await user.save()

// example how to remove AR entity
await user.remove()

// example how to load AR entities
const users = await User.find({ skip: 2, take: 5 })
const newUsers = await User.findBy({ isActive: true })
const timber = await User.findOneBy({ firstName: "Timber", lastName: "Saw" })

 

Data Mapper

  • Active Record와 같이 데이터 베이스에 접근하기 위한 방법입니다.
  • Active Record는 BaseEntity를 상속받아 Entity에 메소드가 내장되어 있었지만 Data Mapper에서는 Entity에 메소드가 내장되지 않습니다.
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"

@Entity()
export class User {
    @PrimaryGeneratedColumn()
    id: number

    @Column()
    firstName: string

    @Column()
    lastName: string

    @Column()
    isActive: boolean
}
const userRepository = dataSource.getRepository(User)

// example how to save DM entity
const user = new User()
user.firstName = "Timber"
user.lastName = "Saw"
user.isActive = true
await userRepository.save(user)

// example how to remove DM entity
await userRepository.remove(user)

// example how to load DM entities
const users = await userRepository.find({ skip: 2, take: 5 })
const newUsers = await userRepository.findBy({ isActive: true })
const timber = await userRepository.findOneBy({
    firstName: "Timber",
    lastName: "Saw",
})
  • TYPEORM에서는 Data Mapper가 큰 규모의 프로젝트 유지보수에 유리하다고 소개하고 있습니다.
  • Active Record 방식은 작은 규모의 프로젝트에서 단순하고 에러가 적은 접근방식을 제공한다고 소개하고 있습니다.

 

 

 

 

<추가>

https://docs.nestjs.com/recipes/sql-typeorm#sql-typeorm

 

Documentation | NestJS - A progressive Node.js framework

Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Progamming), FP (Functional Programming), and FRP (Functional Reac

docs.nestjs.com

https://github.com/typeorm/typeorm/blob/master/docs/active-record-data-mapper.md#what-is-the-active-record-pattern

 

GitHub - typeorm/typeorm: ORM for TypeScript and JavaScript (ES7, ES6, ES5). Supports MySQL, PostgreSQL, MariaDB, SQLite, MS SQL

ORM for TypeScript and JavaScript (ES7, ES6, ES5). Supports MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, SAP Hana, WebSQL databases. Works in NodeJS, Browser, Ionic, Cordova and Elect...

github.com