NestJs TypeOrm Querybuilder 사용하여 쿼리짜보기

taeng·2023년 9월 10일
1

nodeJs에서는 mybatis-mapper 모듈을 사용하였지만 NestJS에서는 TypeORM은 둘 다 TypeScript 기반으로 작성되었으며, 이 둘을 함께 사용하면 일관된 언어와 코드 스타일을 유지하기 위한 장점과 개발자 커뮤니티와 잘 작성된 문서를 가지고 있어서 지원 및 문제 해결이 용이하기해 자주 사용하는 것 같아 사용해보기로 했습니다.

QueryBuilder 함수 정리

CRUD

  • insert
await userRepository
	.createQueryBuilder()
    .insert()
    .into(Entity)
    .values({
    	id:userid,
        password:userPWD
    })
  • select
    select([조회할 엔티티 속성 배열]): 조회할 엔티티 속성을 선택합니다.
const users = await userRepository
  .createQueryBuilder("user")
  .select(["user.id", "user.username"])
  .getMany();
  • update
    update(entity) 테이블 엔티티를 인자값으로 넣고 사용합니다.
await userRepository
  .createQueryBuilder()
  .update(User) 
  .set({ name: 'New Name' }) 
  .where('id = :id', { id: 1 })   
  .execute(); 
  • delete
await userRepository
  .createQueryBuilder()
  .delete() 
  .from(User) 
  .where('id = :id', { id: 1 }) 
  .execute(); 

Mysql 함수를 사용할경우
ex) unixtime을 dateTime 형식으로 바꿀시 펑션으로 사용가능

await userRepository
  .createQueryBuilder()
  .update(User) 
  .set({ date:()=>`FROM_UNIXTIME(${start_time}/1000,"%Y-%m-%d %H:%i:%s")` }) 
  .where('id = :id', { id: 1 })   
  .execute(); 

정렬 및 조건 ,JOIN 등

  • where
    where(criteria, parameters): WHERE 절을 추가합니다. criteria는 쿼리 조건을 나타내며 parameters는 조건에 전달되는 파라미터입니다.
const users = await userRepository
  .createQueryBuilder("user")
  .where("user.username = :username", { username: "john_doe" })
  .getOne();
  • orderBy
    orderBy(order, direction): 결과를 정렬합니다.
const users = await userRepository
  .createQueryBuilder("user")
  .orderBy("user.username", "ASC")
  .getMany();
  • leftJoin
    leftJoin(entity, alias, condition): left 조인을 추가합니다.
const usersWithPosts = await userRepository
  .createQueryBuilder("user")
  .leftJoin("user.posts", "post")
  .getMany();
  • innerJoin
    innerJoin(entity, alias, condition): inner 조인을 추가합니다.
const usersWithOrders = await userRepository
  .createQueryBuilder("user")
  .innerJoin("user.orders", "order")
  .getMany();
  • groupBy
    groupBy(columns): 그룹화할 열을 지정합니다.
const result = await userRepository
  .createQueryBuilder("user")
  .select("user.department, COUNT(user.id)", "userCount")
  .groupBy("user.department")
  .getRawMany();
  • having
    having(criteria, parameters): HAVING 절을 추가합니다. 일반적으로 그룹화된 결과에 대한 필터링에 사용됩니다.
const result = await userRepository
  .createQueryBuilder("user")
  .select("user.department, COUNT(user.id)", "userCount")
  .groupBy("user.department")
  .having("COUNT(user.id) > :count", { count: 5 })
  .getRawMany();
profile
주니어 백엔드 개발자 공부 정리

0개의 댓글