Skip to content

TypeORM โ€ Query Builder

์ตœ๊ฒ€๊ธฐ edited this page Dec 14, 2023 · 2 revisions

Query Builder

TypeORM์˜ ์ฟผ๋ฆฌ๋นŒ๋”๋Š” SQL ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” tool์ด๋‹ค.
TypeORM์€ find, save ๋“ฑ ๋‹จ์ˆœํ•œ SQL์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ณธ์ ์ธ ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋‚˜, ๋ณต์žกํ•œ SQL ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๋Š”๋ฐ ์žˆ์–ด์„œ๋Š” ๋งŽ์€ ์–ด๋ ค์›€์ด ์žˆ๋‹ค.
๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ Query Builder ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ SQL ์ฟผ๋ฆฌ๋ฌธ์„ ์ž‘์„ฑํ•œ๋‹ค.

์˜ˆ์‹œ(์ถ”์ฒœ ์Šคํ† ๋ฆฌ)

    const stories = await this.storyRepository
      .createQueryBuilder('story')
      .innerJoinAndSelect('story.place', 'place')
      .addSelect(
        `
        (${RadiusOfEarth} * 2 * ATAN2(
          SQRT(
            SIN(RADIANS(place.latitude - ${userLatitude}) / 2) *
            SIN(RADIANS(place.latitude - ${userLatitude}) / 2) +
            COS(RADIANS(${userLatitude})) * COS(RADIANS(place.latitude)) *
            SIN(RADIANS(place.longitude - ${userLongitude}) / 2) *
            SIN(RADIANS(place.longitude - ${userLongitude}) / 2)
          ),
          SQRT(1 - (
            SIN(RADIANS(place.latitude - ${userLatitude}) / 2) *
            SIN(RADIANS(place.latitude - ${userLatitude}) / 2) +
            COS(RADIANS(${userLatitude})) * COS(RADIANS(place.latitude)) *
            SIN(RADIANS(place.longitude - ${userLongitude}) / 2) *
            SIN(RADIANS(place.longitude - ${userLongitude}) / 2)
          ))
        ))`,
        'distance',
      )
      .having('distance <= :radius', { radius })
      .orderBy('distance', 'ASC')
      .offset(offset)
      .limit(limit)
      .getMany();

Query Builder์˜ ์žฅ์ 

  1. SQL Injection ๋ฐฉ์ง€ Query Builder๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ํ†ตํ•ด SQL injection ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

  2. ์„ฑ๋Šฅ ์ตœ์ ํ™” ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์„ ํƒ์ ์œผ๋กœ ๋กœ๋“œํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ์‚ฌ์šฉ๋Ÿ‰๊ณผ ์‘๋‹ต ์‹œ๊ฐ„์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”ฅ HeatPick

๐Ÿ”จ ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

๐Ÿซ  ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

1์ฃผ์ฐจ

2์ฃผ์ฐจ

3์ฃผ์ฐจ

4์ฃผ์ฐจ

5์ฃผ์ฐจ

๐Ÿค” ๊ธฐํš ํšŒ์˜๋ก

๐Ÿคท๐Ÿป ์˜์‚ฌ ๊ฒฐ์ •๋ก

๐ŸŽ iOS

๐ŸŒ Backend

๐ŸŽฏ ์ฃผ์ฐจ๋ณ„ ๋ชฉํ‘œ

๐Ÿƒ๐Ÿป ๋ฐ์ผ๋ฆฌ ์Šคํฌ๋Ÿผ

1์ฃผ์ฐจ

2์ฃผ์ฐจ

3์ฃผ์ฐจ

4์ฃผ์ฐจ

5์ฃผ์ฐจ

6์ฃผ์ฐจ

๐Ÿ™‡๐Ÿป ๋ฉ˜ํ† ๋ง ์ผ์ง€

๐Ÿ‘€ ํ”„๋กœ์ ํŠธ ํ˜„ํ™ฉ ๊ณต์œ 

๐Ÿ™‹๐Ÿป ํŒ€ ํšŒ๊ณ 

๐Ÿ’ช ๊ฐœ์ธ ํšŒ๊ณ 

1์ฃผ์ฐจ

2์ฃผ์ฐจ

3์ฃผ์ฐจ

4์ฃผ์ฐจ

5์ฃผ์ฐจ

๐Ÿ“‡ ํ…œํ”Œ๋ฆฟ

Clone this wiki locally