내용 보기
작성자
관리자 (IP : 172.17.0.1)
날짜
2020-09-15 08:38
제목
[TypeScript] ORM 사용 with typeorm
타입스크립트에서 DB 연동시 ORM관련 모듈 typeorm에 관한 테스트 및 샘플 코드 정리 내용이다. typeorm은 JPA계열의 ORM모듈이다. typeorm은 https://typeorm.io/ 사이트에서 자세한 정보를 찾아 볼 수 있다. 2020. 09 기준
총 9가지 데이터베이스를 지원하고 있다. 다음은 Node.js에서 typeorm 모듈을 사용한 간단한 샘플 예제를 설명한다. #모듈 설치1. typeorm모듈을 설치한다.npm install typeorm --save
npm install reflect-metadata --save
npm install mssql --save #프로젝트 생성간단하게 아래 명령을 통해 기본 프로젝트를 생성할 수 있다.typeorm init --name {프로젝트 이름} --database {데이터베이스 이름} 예] typeorm init --name typeorm_sample --database TypeORMSample 프로젝트를 생성하면 아래의 구조로 폴더가 생성된다.
#typeorm 설정ormconfig.json에서 DB접속 및 orm관련 설정을 할 수 있다.
type 옵션에 현재 사용하는 데이터베이스의 종류를 기입하고 migrationsTableName옵션은 마이그레이션시 생성되는 테이블 이름을 직접 설정 하는 옵션이다. #엔티티 생성유저정보(User)와 게시판정보(Board)가 있다는 가정으로 두개의 엔티티정보를 생성한다.두개의 엔티티는 N관계로 설정한다. 유저정보(User), 게시판정보(Board) 1:N 관계 이다.
클래스에 @Entity() 데코레이션을 붙여 엔티티 클래스 임을 정의할 수 있다.
1:N 관계에서 1인 엔티티는 @OneToMany데코레이션을 지정하고 어떤 엔티티의 타입과 관계를 맺을지 상대 엔티티 타입과 속성을 지정한다. boards!: Board[]; 추가로 FK 엔티티의 객체 속성을 추가한다.
1:N 관계에서 N인 엔티티는 @ManyToOne데코레이션을 지정하고 어떤 엔티티의 타입과 관계를 맺을지 상대 엔티티 타입을 지정하고 FK의 컬럼(속성)을 지정한다. 그리고 user: User; 추가로 FK 엔티티 객체 속성을 추가한다. #ORM 다루기A. DB접속, 엔티티 동기화
createConnection()함수로 DB접속과 동시에 Connection객체를 받고 synchronize()함수로 엔티티 모델과 동기화 B. 데이터 INSERT
getRepository()함수를 통해 엔티티 모델을 가져 올 수 있고, find() / findOne() 함수로 실제 매핑된 데이터를 // SQL : SELECT * FROM User WHERE id = '{userID}' let user = await getRepository(User).findOne( {id: userID} ); // SQL : SELECT * FROM Board WHERE user_id = {user.id} let boards = await Board.find( { user: user} ); 그리고 엔티티모델의 save()함수를 통해 데이터를 저장한다. C. 데이터 SELECT
마찬가지로 getRepository()함수를 통해 엔티티 모델을 가져 오고 find() / findOne() 함수를 통해 데이터를 불러온다. 다음은 위 코드조각의 전체 코드이다.
간단하게 유저정보(User)와 게시판정보(Board)의 엔티티를 생성하고 데이터 다루는 방법 샘플 코드를 작성해 보았다. DB테이블 스키마 실제 DB 데이터 조회 |
출처1
출처2
2020-09-15 09:17 |
실행은 npm start 명령으로 실행한다.
|
관리자 (172.17.0.1) |