TIL - 20250803

juni·2025년 8월 3일

TIL

목록 보기
83/316

0803 JPQL,JDBC,QueryDSL 조회 방식


✅ 엔티티 구조 이해

▶ Idol Entity

  • @ManyToOne으로 Group과 연관
  • 지연 로딩(LAZY) 설정

▶ Group Entity

  • @OneToMany(mappedBy = "group")
  • orphanRemoval = true 설정 가능
  • 편의 메서드 addIdol, removeIdol 제공

✅ 다양한 조회 방식

▶ JPQL

String jpql = "SELECT i FROM Idol i WHERE i.idolName = ?1";

▶ Native SQL

String sql = "SELECT * FROM tbl_idol WHERE idol_name = ?1";

▶ JDBC Template

String sql = "SELECT * FROM tbl_idol WHERE idol_name = ?";

▶ QueryDSL

factory.selectFrom(idol)
       .where(idol.idolName.eq("사쿠라"))
       .fetchOne();

✅ QueryDSL 조회 문법 고급

▶ 다양한 조건절

  • idol.idolName.eq("김채원")
  • idol.age.between(20, 30)
  • idol.idolName.contains("김")
  • idol.age.in(20, 25)
  • idol.idolName.startsWith("김")

▶ Optional 활용

Optional<Idol> result = Optional.ofNullable(
  factory.selectFrom(idol)
         .where(idol.idolName.eq("김채원"))
         .fetchOne()
);

✅ 실전 패턴

  • 그룹 이름으로 아이돌 검색
  • 아이돌 나이, 이름 필터링
  • 정렬 조건 및 페이징 적용
  • 댓글형 구조, 조직도 등 계층 구조 쿼리 가능

✅ 요약

  • QueryDSL은 JPQL을 대체할 수 있는 타입 안정성 높은 쿼리 도구
  • 다양한 조회 방식과 조건절을 Java 문법으로 안전하게 작성
  • 연관관계 fetch join으로 성능 최적화 가능
  • 실무에서는 DTO 매핑이나 동적 쿼리 작성에도 활용됨

0개의 댓글