amplitude.init("2e2e5a386856efdf3237cf254a9d14d9"

[챗GPT로 코딩 공부] SQL을 Querydsl로 바꾸기

내일배움캠프 수료생들은 챗GPT를 어떻게 개발 공부에 활용할까요?
Jun 26, 2024
[챗GPT로 코딩 공부] SQL을 Querydsl로 바꾸기
✍🏼
챗GPT, 개발 공부에 있어서 든든한 친구 같은 존재이죠. 내일배움캠프의 수강생들도 혼자 공부할 때에는 챗GPT의 도움을 받고 있는데요. 오늘은 내일배움캠프 수료생들의 챗GPT 경험담을 보고, 여러분의 개발 공부에 적용해봅시다.
기본적인 CRUD나 복잡하지 않은 SQL은 SQL을 잘 알지 못해도 Spring Data Jpa가 알아서 해주지만, 때로는 복잡한 SQL을 작성해야 할 때가 있습니다. 하지만 SQL을 잘 안다고 해도 복잡한 SQL을 한번에 Querydsl 문법으로 변경하는 것은 쉬운 일은 아닙니다. 때문에 저는 복잡한 SQL을 먼저 작성해보고 그 다음 gpt에게 Querydsl 문법으로 변경하게 하여 해당 문제를 해결하였습니다.
 

SQL문 Querydsl로 변경 요청하기

따라서 아래와 같이 작성한 SQL문을 Querydsl 문법으로 바꿔달라고 gpt에게 요청하였습니다.
SELECT p.id AS post_id, p.title AS post_title, COUNT(f.id) AS favorite_count, MAX(CASE WHEN f.member_id = :specific_member_id THEN 1 ELSE 0 END) AS is_favorite FROM Post p LEFT JOIN Favorite f ON p.id = f.post.id GROUP BY p.id, p.title;
 
답변으로 아래와 같이 SELECT문 안에 있는 필드를 담을 수 있는 static class를 별도로 생성하고 Querydsl의 Expressions.numberTemplate를 이용하여 Querydsl 문법으로 변경해줬습니다.
import com.querydsl.core.annotations.QueryProjection; import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.dsl.NumberTemplate; import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.impl.JPAQueryFactory; import java.util.List; public class PostRepository { private final JPAQueryFactory queryFactory; public PostRepository(JPAQueryFactory queryFactory) { this.queryFactory = queryFactory; } public List<PostProjection> getPostsWithFavoritesAndCounts(long specificMemberId) { QPost qPost = QPost.post; QFavorite qFavorite = QFavorite.favorite; return queryFactory .select( Expressions.numberTemplate(Integer.class, "0").count().as("favoriteCount"), Expressions.numberTemplate(Integer.class, "0").countDistinct().as("isFavorite"), qPost.id.as("postId"), qPost.title.as("postTitle") ) .from(qPost) .leftJoin(qFavorite).on(qPost.id.eq(qFavorite.post.id)) .groupBy(qPost.id, qPost.title) .fetch(); } public static class PostProjection { private final Long postId; private final String postTitle; private final Long favoriteCount; private final Long isFavorite; @QueryProjection public PostProjection(Long postId, String postTitle, Long favoriteCount, Long isFavorite) { this.postId = postId; this.postTitle = postTitle; this.favoriteCount = favoriteCount; this.isFavorite = isFavorite; } // Getters for projection fields } }
 
 

내일배움캠프가 여러분의 러닝메이트가 되어드리겠습니다

내일배움캠프의 많은 수강생들이 부트캠프 생활을 수료하고 현업에서 개발자로 활약하고 있습니다. 내일배움캠프는 모든 운영진이 교육, 특강, 12시간 밀착 케어, 찐한 관리, 인재 채용까지 열과 성을 다해 수강생들의 꿈을 지원하고 있습니다. 수많은 장애물을 넘을 수 있도록 내일배움캠프가 든든한 러닝메이트가 되어드리겠습니다. 내일배움캠프과 함께 여러분의 개발자 여정을 시작하세요.
 
 
CREDIT
글 | 손창현 내일배움캠프 수료생 편집 | 정효재 팀스파르타 에디터
 
 

취업 준비, 어디서부터 시작해야 할지 모르겠다면?

 
🧐비전공자인데 IT 업계 취업할 수 있을까?
😟프로젝트 경험이 부족한데, 어떻게 준비해야 할까?
🥺IT 기업으로 이직하고 싶은데 뭐부터 시작해야 할까?
 
이런 고민을 하고 있다면, 내일배움캠프의 IT 취업 컨설팅을 받아보세요.
취업 코칭 전문가들이 여러분의 고민을 해결해 드립니다.
 
다음 링크에 이메일을 입력하시면 메일로 1:1 커리어 상담권과 취준 자료집을 보내드릴게요.
 
Share article
RSSPowered by inblog