JPA/JPA

JPA에서 사용하는 다양한 API

lovineff 2020. 6. 9. 10:33

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