// product.entity.ts import { ProductSaleslocation } from 'src/apis/productsSaleslocations/entities/productSaleslocation.entity'; import { Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn } from 'typeorm'; @Entity() export class Product { @PrimaryGeneratedColumn('uuid') id: string; @Column() name: string; @Column() description: string; @Column() price: number; @Column() isSoldout: boolean; @JoinColumn() @OneToOne(() => ProductSaleslocation) productSaleslocation: ProductSaleslocation; }
@OneToOne()
: 두 테이블의 관계를 나타내는 것으로 @OneToOne( ) 은 한쪽에만 쓰거나, 양쪽에 모두 써줄 수 있습니다. 여기서는 Product에만 써주겠습니다.@JoinColumn()
: 두 테이블을 하나로 합쳐서 데이터를 가져와야하기에 사용하였으며, 한쪽 테이블에만 적어줘야 합니다.// product.entity.ts import { ProductSaleslocation } from 'src/apis/productsSaleslocations/entities/productSaleslocation.entity'; import { Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn } from 'typeorm'; @Entity() export class Product { @PrimaryGeneratedColumn('uuid') id: string; @Column() name: string; @Column() description: string; @Column() price: number; @Column() isSoldout: boolean; @JoinColumn() @OneToOne(() => ProductSaleslocation) productSaleslocation: ProductSaleslocation; @ManyToOne(() => ProductCategory) productCategory: ProductCategory; }
@JoinColumn()
: Many 부분에 해당하는 테이블(product)에서는 JoinColumn( ) 이 생략 가능합니다.// prodcutTag.entity.ts import { Product } from 'src/apis/products/entities/product.entity'; import { Column, Entity, ManyToMany, PrimaryGeneratedColumn } from 'typeorm'; @Entity() export class ProductTag { @PrimaryGeneratedColumn('uuid') id: string; @Column() name: string; @ManyToMany(() => Product, (products) => products.productTags) products: Product[]; }
@ManyToMany()
: N :M의 관계를 가질 때는 두 테이블 모두 컬럼을 추가하여 연결해 주어야 합니다.(products) => products.productTags
: products 입장에서의 productTags 와의 관계를 명시해 준 것으로, N : M 관계에서는 두 테이블 모두 관계를 나타내 주어야합니다.Product[]
: 하나의 태그에 상품이 여러개 해당될 수 있기에 배열로 나타내는 것 입니다.// product.entity.ts import { ProductSaleslocation } from 'src/apis/productsSaleslocations/entities/productSaleslocation.entity'; import { Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn } from 'typeorm'; @Entity() export class Product { @PrimaryGeneratedColumn('uuid') id: string; @Column() name: string; @Column() description: string; @Column() price: number; @Column() isSoldout: boolean; @JoinColumn() @OneToOne(() => ProductSaleslocation) productSaleslocation: ProductSaleslocation; @ManyToOne(() => ProductCategory) productCategory: ProductCategory; @JoinTable() @ManyToMany(() => ProductTag, (productTags) => productTags.products) productTags: ProductTag[]; }
@JoinTable() : N : M 관계에서 생성되는 중간 테이블을 자동으로 만들어 주는 것으로 기준이 되는 테이블 한 쪽에만 작성해주면 됩니다.
JoinTable과 ManyToMany를 사용하여 자동으로 중간테이블이 생기게끔 할 수 있지만,
N : M 테이블에 추가적인 데이터 컬럼들이 필요할 때는 직접 만들어줘야 합니다.
단, 직접 만들때는 N:1 + N:1 로 각각 연결을 해주셔야 합니다!!
데이터 베이스 조회하기
=> show databases;
원하는 데이터베이스 사용하기
=> use myproject;
해당 데이터베이스의 테이블 조회하기
=> show tables;
해당 테이블 조회하기
=> desc product;
데이터 조회하기
=> select * from product;
데이터 생성하기
=> insert into product(id, name, description, price, isSoldout) values(uuid(), '마우스', '좋은 마우스', 1000, false);
데이터 수정하기
=> update product
set name = '마우스'
where description = '정말 좋은 마우스입니다!!!';
// where : 조건 지정 할 때 사용됩니다.
데이터 연결하기
=> update product
set productSaleslocationId = 'b676a1ae-cb8c-11ec-95e6-6f6cd1d3adeb'
where id = '93e8dbda-cb8b-11ec-95e6-6f6cd1d3adeb'
;
오름차순
=> select name, price, isSoldout
from product
order by price asc;
내림차순
=> select name, price, isSoldout
from product
order by price desc;