HTML5
2023.01.13 18:26

[TypeORM] TypeORM CreateQueryBuilder

조회 수 1570 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print


출처: https://velog.io/@yukina1418/TypeORM-CreateQueryBuilder-%EC%BB%A8%EB%8B%9D%ED%8E%98%EC%9D%B4%ED%8D%BC




이것을 포스팅하는 이유는 정말 단순하다.

내가 찾아보는데 너무 짜증나고 답답해서 걍 내가 생각날 때 마다, 사용하는 것 마다 모아놓으려고(....)

근데 이게 0.2버전이라 0.3버전에서도 적용되는지 솔직히 모르겠다.
대부분 호환이 된다고는 알고있는데 (쿼리빌더쪽은) 정말 되는지는...해봐야알듯..ㅠ


selectQueryBuilder(조회)

where를 쓰는 다양한 방법

주의 ! ${} 사이에 들어가는 값이 문자열이라면, 쌍따옴표를 꼭 넣어줘야한다 !
(적힌 것 외에도 다양한 방법이 존재하고, 각각 방향성이 약간씩 차이가 있다고한다.)

await this.connection
      .createQueryBuilder(User, 'user')
      .where(`id = ${userId}`)
      .getOne();
await this.connection
      .createQueryBuilder(User, 'user')
      .where(`user.id = ${userId}`)
      .getOne();
await this.connection
      .createQueryBuilder(User, 'user')
      .where('user.id = :userId', { userId })
      .getOne();
await this.connection
      .createQueryBuilder(User, 'user')
      .where('user.id = :userId', { userId : payload.userId })
      .getOne();
await this.connection
      .createQueryBuilder(User, 'user')
      .where({ id : userId })
      .getOne();
await this.connection
      .createQueryBuilder()
      .select('user')
      .from(User, 'user')
      .where({ id : userId })
      .getOne();

한개의 조건으로 찾아오기

await this.connection
      .createQueryBuilder(User, 'user')
      .where('user.name = :name', { name })
      .getOne();
await this.connection
      .createQueryBuilder(User, 'user')
      .where('user.name = :name ', { name:'바보' })
      .getOne();

And로 다중 조건 걸어서 찾아오기

await this.connection
      .createQueryBuilder(User, 'user')
      .where('user.name = :name', { name })
      .andWhere('user.gender =:gender',{gender:'man'})
      .getOne()

일부만 들어있어도 찾아오기 (LIKE문)

await this.connection
      .createQueryBuilder(User, 'user')
      .where('user.name LIKE :name', { name: `%${김}%` })
      .getOne();
아마 아래꺼도 되는걸로 앎
await this.connection
      .createQueryBuilder(User, 'user')
      .where('user.name LIKE :name', { name: `%"김"%` })
      .getOne();

복수의 값으로 찾아오기 (IN문)

await this.connection
      .createQueryBuilder(User, 'user')
      .where('user.name IN (:names)', { names })
      .getMany();

내가 보고싶은 것만 보기

await this.connection
      .createQueryBuilder(User, 'user')
      .select(['user.name','user.age'])
      .where('user.name IN (:names)', { names })
      .getOne();

관계 묶어서 다같이 보기

await this.connection
      .createQueryBuilder(User, 'user')
      .leftJoinAndSelect('user.item','item')
      .where('user.name IN (:names)', { names })
      .getOne();

관계로 묶은 것 중에서도 보고싶은 것만 보기

await this.connection
      .createQueryBuilder(User, 'user')
      .select(['user.name','user.age','item.name'])
      .leftJoinAndSelect('user.item','item')
      .where('user.name IN (:names)', { names })
      .getOne();

이름 바꿔서 보기 바꿔서 보기 (AS문)

await this.connection
      .createQueryBuilder(User, 'user')
      .select([
      'user.address AS juso',
      'user.name AS namae'
      ])
      .where('user.name = :name', { name })
      .getRawOne();

두개 컬럼 합쳐서 보기 (CONCAT문)

await this.connection
      .createQueryBuilder(User, 'user')
      .select([
      'CONCAT('user.address,user.DetailAddres') address',
      ])
      .where('user.name = :name', { name })
      .getRawOne();

없는 컬럼 추가해서 결과값으로 보기 (CONCAT문)

문자열을 넣고 싶을 경우 " " < 사이에 넣어야함!!
await this.connection
      .createQueryBuilder(User, 'user')
      .select([
      'CONCAT("서울특별시 한강공원") address',
      ])
      .where('user.name = :name', { name })
      .getRawOne();

상수 값도 추가할 수 있음

const data = "피자"
await this.connection
      .createQueryBuilder(User, 'user')
      .select([
      'CONCAT("${data}") likeMenu',
      ])
      .where('user.name = :name', { name })
      .getRawOne();

그거 아니면 이거로 바꿔서 보기 (CASE WHEN ELSE END문)

await this.connection
      .createQueryBuilder(User, 'user')
      .select([
      'CASE WHEN user.likeMenu ="피자" THEN "치킨" ELSE user.name END AS menu'
      ])
      .where('user.age = :age', { age:10 })
      .getRawOne();

특정 값이 존재하는 것 찾아오기 (IS NOT NULL문)

await this.connection
      .createQueryBuilder(User, 'user')
      .select([
      'user.address AS juso',
      'user.name AS namae'
      ])
      .where('user.name = :name', { name })
      .andWhere('user.tags IS NOT NULL')
      .getRawOne();

특정 값이 비어있는 것 찾아오기 (IS NULL문)

await this.connection
      .createQueryBuilder(User, 'user')
      .select([
      'user.address AS juso',
      'user.name AS namae'
      ])
      .where('user.name = :name', { name })
      .andWhere('user.tags IS NULL')
      .getRawOne();

몇 개 있는지 체크하기 (COUNT문)

await this.connection
      .createQueryBuilder(User, 'user')
      .select([
      'COUNT(CASE WHEN user.sity IN("인천","수원") THEN 1 END) AS gyeonggi'
      ])
      .where('user.gender = :gender', { gender:"man" })
      .getRawMany();

날짜 범위 검색으로 찾아오기 (BETWEEN문)

await this.connection
      .createQueryBuilder(User, 'user')
      .where('user.gender = :gender', { gender:"man" })
      .andWhere(`user.createdAt BETWEEN '${start.toISOString()}' AND '${end.toISOString()}'`)
      .getMany();

다중 AND 조건 걸어서 찾아오기 (Brackets문) (보통 검색기능에서 많이 씀!)

const payload = {name:"김씨",age:10}

await this.connection
      .createQueryBuilder(User, 'user')
      .where('user.gender = :gender', { gender:"man" })
      .andWhere(new Brackets(qb)=>{
      qb.orWhere(user.name = "${payload.name}");
      qb.orWhere(user.age = "${payload.age}");
      })
      .getMany();

한개의 컬럼값이 동적으로 들어올 때 OR 조건 걸어서 찾아오기 (Brackets문 응용)

const menus = ["치킨","피자","족발"]

await this.connection
      .createQueryBuilder(User, 'user')
      .where('user.gender = :gender', { gender:"man" })
      .andWhere(new Brackets(qb)=>{
      menus.forEach(menu:string) => {
      qb.orWhere(`user.likeMenu = "${menu}"`)
      })
      .getMany();

주기적으로 생각나고 까먹을 때 마다 추가 예정


Dreamy의 코드 스크랩

내가 모으고 내가 보는

List of Articles
번호 분류 제목 날짜 조회 수 추천 수
56 Pi Teensy 3.5 spec & pin 2017.07.12 5101 0
55 PHP [PHP] .php 확장자 없이 URL 접속하기 2020.10.26 4905 0
54 Android 안드로이드 국가별 언어코드 2020.10.06 4783 0
53 일반 Cakewalk 단축키 정리 2021.07.20 4217 0
52 LINUX Ubuntu apt-get 명령어 정리 2020.02.11 4169 0
51 C# C#의 $으로 문자열 보간하기 2022.04.28 4116 0
50 Pi 레귤레이터(3.3V 1A) KA78R33 데이터시트 file 2019.08.20 4006 0
49 Android Android Studio 안드로이드 스튜디오 단축키 2020.03.16 3736 0
48 Android Android Animation XML 사용 2020.12.01 3710 0
47 C# C# ?? 및 ??=, ?. 연산자 2021.05.09 3357 0
46 일반 엑셀 Excel 데이터 시각화 (엑셀 사용 Tip) 2021.08.25 3000 0
45 일반 3D프린트 가이드 모음 2022.04.02 2545 0
44 업무 Back-End 관련 정보 2022.05.17 1861 0
43 PHP SQL :: EXIST , NOT EXIST 2022.09.05 1685 0
» HTML5 [TypeORM] TypeORM CreateQueryBuilder 2023.01.13 1570 0
목록
Board Pagination ‹ Prev 1 ... 26 27 28 29 30 31 32 33 34 Next ›
/ 34

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소

Designed by sketchbooks.co.kr / sketchbook5 board skin

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5