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 매핑이나 동적 쿼리 작성에도 활용됨