-
Notifications
You must be signed in to change notification settings - Fork 5
typeORM 정리
→ typeORM의 개념을 익히며 Active Record 패턴과 Data Mapper 패턴 차이점 학습
→ TypeORM이란 ORM에서 NodeJS, Browser, Cordova, PhoneGap, Ionic, React Native, NativeScript, Expo, and Electron platforms 환경에서 실행가능함
→ TypeORM은 타입스크립트 뿐만 아니라 자바스크립트(ES5, ES6, ES7)도 지원하고 있음
→ TypeORM은 MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, WebSQL 데이터베이스를 지원
( ORM(Object-relational mapping)
: 데이터베이스 객체지향 언어를 맵핑하는 기법)
→ Active Record 패턴
과 Data Mapper 패턴
으로 개발할 수 있음
→ Active Record
: CRUD Based, 간단히 사용할 수 있는 규모가 작은 프로젝트에 적합
→ Data Mapper
: Domain Based, 규모가 큰 프로젝트에 적합하고 유지보수하는데 효과적
→ DB 모델이 데이터에 접근 하는 방법
→ 모델의 메소드를 사용하여 객체를 저장, 제거, 불러오는 방식
→ BaseEntity
라는 클래스를 상속하여 사용
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;
}
// 사용 예시
const user = new User();
user.firstName = "Timber";
user.lastName = "Saw";
user.age = 25;
await user.save();
const allUsers = await User.find();
const firstUser = await User.findOne(1);
const timber = await User.findOne({ firstName: "Timber", lastName: "Saw" });
await timber.remove();
→ 분리된 클래스에 쿼리 메소드를 정의하는 방식이며
→ Repository를 이용하여 객체를 저장, 제거, 불러옴
→ 모델에 접근하는 방식이 아닌 Repository에서 데이터에 접근한다는 것
(모델과 DB사이에 의존성이 적어져, 서로가 독립적으로 유지 가능)
import {Entity, PrimaryGeneratedColumn, Column} from "typeorm";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
firstName: string;
@Column()
lastName: string;
@Column()
isActive: boolean;
}
// Generic 타입을 이용하여 상속
import {EntityRepository, Repository} from "typeorm";
import {User} from "../entity/User";
@EntityRepository()
export class UserRepository extends Repository<User> {
findByName(firstName: string, lastName: string) {
return this.createQueryBuilder("user")
.where("user.firstName = :firstName", { firstName })
.andWhere("user.lastName = :lastName", { lastName })
.getMany();
}
}
// 사용 예시
const userRepository = connection.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.find({ isActive: true });
const timber = await userRepository.findOne({ firstName: "Timber", lastName: "Saw" });
참고자료