Ksug2015 jpa4 객체지향쿼리

JPQL, QueryDSL 같은 객체 지향 쿼리를 다룹니다.

  1. YoungHan Kim
    JPQL, QueryDSL 같은 객체 지향 쿼리를 다룹니다.
    Transcript Header:
    Ksug2015 jpa4 객체지향쿼리
    Transcript Body:
    • 1. 객체 지향 쿼리 ex07, ex08
    • 2. 김영한 SI, J2EE 강사, DAUM, SK 플래닛 저서: 자바 ORM 표준 JPA 프로그래밍
    • 3. 목차 • JPA와 객체지향 쿼리 • QueryDSL
    • 4. JPA와 객체지향 쿼리
    • 5. JPA는 다양한 쿼리 방법을 지원 • JPQL • JPA Criteria • QueryDSL • 네이티브 SQL • JDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용
    • 6. JPQL 소개 • 가장 단순한 조회 방법 • EntityManager.find() • 객체 그래프 탐색(a.getB().getC()) • 나이가 18살 이상인 회원을 모두 검색하고 싶다면?
    • 7. JPQL • JPA를 사용하면 엔티티 객체를 중심으로 개발 • 문제는 검색 쿼리 • 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색해야 함. • 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능 • 애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요
    • 8. JPQL • JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어를 제 공 • SQL과 문법 유사, SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN 지원 • JPQL은 엔티티 객체를 대상으로 쿼리 • SQL은 데이터베이스 테이블을 대상으로 쿼리
    • 32. Named 쿼리 - 어노테이션 @Entity @NamedQuery( name = "Member.findByUsername", query="select m from Member m where m.username = :username") public class Member { ... } List resultList = em.createNamedQuery("Member.findByUsername", Member.class) .setParameter("username", "회원1") .getResultList();
    • 33. Named 쿼리 - XML에 정의 select count(m) from Member m META-INF/ormMember.xml [META-INF/ormMember.xml] [META-INF/persistence.xml]
    • 34. Named 쿼리 환경에 따른 설정 • XML이 항상 우선권을 가진다. • 애플리케이션 운영 환경에 따라 다른 XML을 배포할 수 있다.
    • 35. JPQL 실습 • ex07 • 단순 쿼리 • 조인 • 페치 조인 • 페이징 API
    • 36. QueryDSL
    • 37. QueryDSL 소개 • JPQL을 코드로 작성할 수 있도록 도와주는 빌더 API • JPA 크리테리아에 비해서 편리하고 실용적임 • 오픈소스 • 한국어 번역(최범균): www.querydsl.com/static/querydsl/ 3.6.3/reference/ko-KR/html_single/
    • 38. JPQL의 문제점 • SQL, JPQL은 문자, Type-check 불가능 • 실행해 보기 전까지 작동여부 확인 불가
    • 39. QueryDSL 장점 • 문자가 아닌 코드로 작성 • 컴파일 시점에 오류 발견 • 코드 자동완성 • 단순함, 쉬움: 코드 모양이 JPQL과 거의 흡사. • 동적 쿼리
    • 40. 작동
    View More