JPA에서 사용하는 다양한 API
JPQL
QueryDSL
네이티브 SQL
JDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용
JPQL(객체 지향 SQL)
엔티티 중심으로 개발
검색에도 테이블이 아닌 엔티티 객체를 대상으로 검색
애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL 필요
EntityManager.find()
객체 그래프 탐색(a.getB().getC())
ANSI 표준 문법은 모두 지원
동적 쿼리 생성이 매우 어려움
JPQL은 엔티티 객체를 대상으로 쿼리
List<Member> resultList = em.createQuery(
"select m from Member m where m.username like '%kim%'", // 테이블명이 아니라 엔티티 명
Member.class
).getResultList();
Criteria
사용이 매우 복잡함. 사용 안하는것을 추천함.
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Member> query = cb.createQuery(Member.class);
Root<Member> m = query.from(Member.class);
CriteriaQuery<Member> cq = query.select(m).where(cb.equal(m.get("username"), "kim"));
List<Member> resultList = em.createQuery(cq).getResultList();
** QueryDSL(오픈소스)
자바 코드로 JPQL을 작성할 수 있음
컴파일 시점에 문법 오류를 찾을 수 있음
동적쿼리 작성 편함
단순하고 쉬움
실무 사용 권장
네이티브 SQL
JPA가 제공하는 SQL을 직접 사용 가능
JDBC 직접 사용, SpringJdbcTemplate 등
영속성 컨텍스트를 적절한 시점에 강제로 플러시 필요
'JPA > JPA' 카테고리의 다른 글
OneToOne Entity (0) | 2020.06.09 |
---|---|
변경 감지와 병합(merge) (0) | 2020.06.09 |
JPA 의 데이터 타입 분류 (0) | 2020.06.09 |
고아 객체 (0) | 2020.06.09 |
영속성 전이(CASCADE) (0) | 2020.06.09 |