지금까지 사용하고 심지어 오늘도 사용한 게 무슨 방식인지도 모른다는 사실에... 정리해본다 😂😂
BaseEntity
를 상속해야 함BaseEntity
는 Repository
의 많은 메서드들을 가짐@Entity()
export class User extends BaseEntity {
@PrimaryColumn()
id: number
@Column()
firstName: string;
}
const user = new User();
user.firstName = 'Timber';
await user.save();
await user.remove();
const users = await User.find({ skip: 2, take: 5 });
Repository
or EntityManager
를 엔티티와 사용할 필요가 없음@Entity()
export class User extends BaseEntity {
@PrimaryColumn()
id: number
@Column()
firstName: string;
static findById(id: number) {
return this.createQueryBuilder("user")
.where("user.id = :id", { id })
.getOne();
}
}
const timber = await User.findById(1);
repositories
를 통해 CURD 수행repositories
를 통해 DB에 접근const userRepository = connection.getRepository(User);
const user = new User();
user.firstName = 'Timber';
await userRepository.save();
await userRepository.remove();
const users = await userRepository.find({ skip: 2, take: 5 });
@EntityRepository()
export class UserRepository extends Repository<User> {
findById(id: number) {
return this.createQueryBuilder("user")
.where("user.id = :id", { id })
.getOne();
}
}
const userRepository = connection.getCustomRepository(UserRepository);
const timber = await userRepository.findById(1);
무엇을 사용해야 하나?
- 두 방식 모두 장단점이 존재.
- Active Record 방식은 작은 규모의 애플리케이션에서 간단하게 만들 수 있음
- Data Mapper 방식은 큰 규모의 애플리케이션에서 유지보수성이 좋음
- 간단함은 언제나 더 나은 유지보수를 만드는 열쇠이다...